POJ 3905 Perfect Election(简单2-SAT) http://poj.org/problem?id=3905 题意: 这里有1到N个人正在进行议员选举,每个人有2种结果,选上(0),未选上(1).现在的问题是,有M个选民的议员,结果必须符合这M条意愿,问你是否存在这种选举结果. 分析: 由于每条意愿都是
POJ 3905 Perfect Election(简单2-SAT)
http://poj.org/problem?id=3905
题意:
这里有1到N个人正在进行议员选举,每个人有2种结果,选上(0),未选上(1).现在的问题是,有M个选民的议员,结果必须符合这M条意愿,问你是否存在这种选举结果.
分析:
由于每条意愿都是或的关系.则直接用2-sat添加对应边即可.
简单2-SAT问题,注意把候选人序号改成0到N-1即可.
AC代码:
#include
#include
#include
#include
using namespace std;
const int maxn = 1000+10;
struct TwoSAT
{
int n;
vector G[maxn*2];
int S[maxn*2],c;
bool mark[maxn*2];
bool dfs(int x)
{
if(mark[x^1]) return false;
if(mark[x]) return true;
mark[x]= true;
S[c++]=x;
for(int i=0;i n=n;
for(int i=0;i 0) mark[S[--c]]=false;
if(!dfs(i+1)) return false;
}
}
return true;
}
}TS;
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==2)
{
TS.init(n);
for(int i=0;i
查看更多关于POJ3905PerfectElection(简单2的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did94814