poj 3678 (如何根据 布尔运算 来建图 跑 2-sat)
2017-04-10 20:36
232 查看
#include<cstdio> #include<cstring> #define MAX_N 2017 using namespace std; bool map[MAX_N][MAX_N],vis[MAX_N],rmap[MAX_N][MAX_N]; int stack[MAX_N],cmp[MAX_N]; int tot=0,n; void dfs(int i) { vis[i]=1; for(int j=0;j<2*n;j++) { if(!vis[j]&&map[i][j]) dfs(j); } stack[tot++]=i; } void rdfs(int i,int k) { vis[i]=1; cmp[i]=k; for(int j=0;j<2*n;j++) { if(!vis[j]&&rmap[i][j]) rdfs(j,k); } } int scc() { memset(vis,0,sizeof(vis)); for(int i=0;i<2*n;i++) { if(!vis[i]) dfs(i); } int k=0; memset(vis,0,sizeof(vis)); for(int i=tot-1;i>=0;i--) { if(!vis[stack[i]]) rdfs(stack[i],k++); } return k; } int main() { int m,a,b,c; char str[10]; scanf("%d%d",&n,&m); while(m--) { scanf("%d%d%d %s",&a,&b,&c,str); if(str[0]=='A') { if(c==1) { map[a+n][a]=1; map[b+n][b]=1; rmap[a][a+n]=1; rmap[b][b+n]=1; } else { map[a][b+n]=1; map[b][a+n]=1; rmap[b+n][a]=1; rmap[a+n][b]=1; } } else if(str[0]=='O') { if(c==1) { map[a+n][b]=1; map[b+n][a]=1; rmap[b][a+n]=1; rmap[a][b+n]=1; } else { map[a][a+n]=1; map[b][b+n]=1; rmap[a+n][a]=1; rmap[b+n][b]=1; } } else { if(c==1) { map[a][b+n]=1; map[b+n][a]=1; map[a+n][b]=1; map[b][a+n]=1; rmap[b+n][a]=1; rmap[a][b+n]=1; rmap[b][a+n]=1; rmap[a+n][b]=1; } else { map[a][b]=1; map[b][a]=1; map[a+n][b+n]=1; map[b+n][a+n]=1; rmap[b][a]=1; rmap[a][b]=1; rmap[b+n][a+n]=1; rmap[a+n][b+n]=1; } } } int k=scc(); int flag=0; for(int i=0;i<n;i++) { if(cmp[i]==cmp[i+n]) { flag=1; break; } } if(flag) printf("NO\n"); else printf("YES\n"); }
相关文章推荐
- POJ 3678 Katu Puzzle 2-SAT
- poj 3678 Katu Puzzle 【2-sat 经典建图】
- |poj 3678|2-SAT|Katu Puzzle
- poj 3678 (2-SAT)
- POJ 3678 2-sat
- 2-sat POJ 3678
- poj--3678--Katu Puzzle(2-sat 建模)
- poj 3678 Katu Puzzle 2-SAT 有n个变量,每个可以取0或者1,再给出m组关系,每组关系都是两个变量进行运算可以得到的结果,运算有AND OR XOR三种,问能否满足这些关系,
- Poj 3678 (two-sat)
- POJ 3678 Katu Puzzle(2 - SAT) - from lanshui_Yang
- Katu Puzzle (poj 3678 2-SAT)
- POJ 3678 Katu Puzzle (2-SAT)
- POJ 3678 Katu Puzzle 2-SAT
- poj 3678 Katu Puzzle(Two Sat)
- POJ 3678 深刻理解2SAT
- poj 3678 Katu Puzzle (2-sat)
- poj 3678 2-SAT
- POJ 3678 Katu Puzzle(2-sat)
- POJ 3678 2-SAT
- POJ 3678 OO版2-SAT模板