Heim >Datenbank >MySQL-Tutorial >POJ 3905 Perfect Election(简单2

POJ 3905 Perfect Election(简单2

WBOY
WBOYOriginal
2016-06-07 15:48:36920Durchsuche

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<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn = 1000+10;
struct TwoSAT
{
    int n;
    vector<int> 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<g if return false true void init n this->n=n;
        for(int i=0;i<n g memset void add_clause x xval y yval bool solve for i="0;i<2*n;i+=2)" if c="0;" while>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<m int a scanf ts.add_clause printf return><br>
<br>


</m></n></g></int></vector></algorithm></cstring></cstdio>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn