zoukankan      html  css  js  c++  java
  • 2-sat——poj3678经典建图

    比较经典的建图,详见进阶指南

    2-sat一般要用到tarjan来求强连通分量

    /*2-sat要加的是具有强制关系的边*/
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define N 2005
    #define M 2000005
    struct Edge{int to,nxt;}e[M<<1];
    int n,m,head[N],tot;
    void init(){
        memset(head,-1,sizeof head);
    }
    void add(int u,int v){
        e[tot].to=v;
        e[tot].nxt=head[u];
        head[u]=tot++;
    }
    
    
    int low[N],dfn[N],cnt,id[N],ind,stk[N],top,ins[N];
    void tarjan(int x){
        dfn[x]=low[x]=++ind;
        stk[++top]=x;ins[x]=1;
        for(int i=head[x];i!=-1;i=e[i].nxt){
            int y=e[i].to;
            if(!dfn[y]){
                tarjan(y);
                low[x]=min(low[x],low[y]);
            }
            else if(ins[y])
                low[x]=min(low[x],low[y]);
        }
        if(dfn[x]==low[x]){
            cnt++;int y;
            do{
                y=stk[top--];
                ins[y]=0;
                id[y]=cnt;
            }while(x!=y);
        }
    }
    
    int main(){
        init();
        int a,b,c;
        char op[10];
        cin>>n>>m;
        for(int i=1;i<=m;i++){
            scanf("%d%d%d %s",&a,&b,&c,op);
            a++,b++;
            if(op[0]=='A'){
                if(c==0)add(a+n,b),add(b+n,a);
                if(c==1)add(a,a+n),add(b,b+n);            
            }
            if(op[0]=='O'){
                if(c==0)add(a+n,a),add(b+n,b);
                if(c==1)add(a,b+n),add(b,a+n);
            }
            if(op[0]=='X'){
                if(c==0)add(a,b),add(b,a),add(a+n,b+n),add(b+n,a+n);
                if(c==1)add(a,b+n),add(a+n,b),add(b,a+n),add(b+n,a);
            }
        }
        for(int i=1;i<=2*n;i++)
            if(!dfn[i])tarjan(i);
        for(int i=1;i<=n;i++)
            if(id[i]==id[i+n]){
                puts("NO");
                return 0;
            }    
        puts("YES");
    }
  • 相关阅读:
    SEO优化范列20120215
    IIS中的上传目录权限设置问题
    c# webservice接口 输出xml
    360浏览器用window.open的话,session会丢失
    iis网站安全设置
    SEO优化20120215
    IIS6.0安全设置方法 .
    优化20120215
    WIN2003的安全设置
    webservice 生成dll的方法
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10870353.html
Copyright © 2011-2022 走看看