博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3678 2-SAT问题
阅读量:4598 次
发布时间:2019-06-09

本文共 1787 字,大约阅读时间需要 5 分钟。

思路:将每个点拆分为两个点 a与a' ,a表示为1,a'表示为0。那么条件给的每个边自然就会存在矛盾,然后根据2-SAT建边就行了。

#include
#include
#include
#include
#include
#include
#define Maxn 3010#define Maxm 1000000using namespace std;int dfn[Maxn],low[Maxn],vi[Maxn],head[Maxn],e,n,m,lab,top,Stack[Maxn],num,id[Maxn];struct Edge{ int u,v,next,l;}edge[Maxm];void init(){ int i,j; memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); memset(head,-1,sizeof(head)); memset(id,0,sizeof(id)); memset(vi,0,sizeof(vi)); e=lab=num=top=0;}void add(int u,int v){ edge[e].u=u,edge[e].v=v,edge[e].next=head[u],head[u]=e++;}void Tarjan(int u){ int i,j,v; dfn[u]=low[u]=++lab; Stack[top++]=u; vi[u]=1; for(i=head[u];i!=-1;i=edge[i].next) { v=edge[i].v; if(!dfn[v]) { Tarjan(v); low[u]=min(low[u],low[v]); } if(vi[v]) low[u]=min(low[u],dfn[v]); } if(low[u]==dfn[u]) { ++num; do{ i=Stack[--top]; vi[i]=0; id[i]=num; }while(i!=u); }}int solve(){ int i,j; for(i=1;i<=n*2;i++) { if(!dfn[i]) Tarjan(i); } for(i=1;i<=n;i++) { if(id[i]==id[i+n]) return 0; } return 1;}int main(){ int i,j,a,b,c; char str[10]; while(scanf("%d%d",&n,&m)!=EOF) { init(); for(i=1;i<=m;i++) { scanf("%d%d%d%s",&a,&b,&c,&str); a++,b++; if(str[0]=='O') { if(c==0) { add(a,b+n); add(a,b); add(b,a+n); add(b,a); add(a+n,b+n); add(b+n,a+n); } else { add(a+n,b); add(b+n,a); } } if(str[0]=='A') { if(c==0) { add(a,b+n); add(b,a+n); } else { add(a+n,b); add(a,b); add(b+n,a); add(b,a); add(a+n,b+n); add(b+n,a+n); } } if(str[0]=='X') { if(c==0) { add(a,b); add(b+n,a+n); add(b,a); add(a+n,b+n); } else { add(a,b+n); add(b,a+n); add(a+n,b); add(b+n,a); } } } if(solve()) printf("YES\n"); else printf("NO\n"); } return 0;}

 

转载于:https://www.cnblogs.com/wangfang20/p/3219952.html

你可能感兴趣的文章
A == B ?
查看>>
洛谷P3763 [Tjoi2017]DNA 【后缀数组】
查看>>
GSM模块_STM32实现GPRS与服务器数据传输经验总结
查看>>
5.Python进阶_循环设计
查看>>
【NLP】揭秘马尔可夫模型神秘面纱系列文章(一)
查看>>
Android采访开发——2.通用Android基础笔试题
查看>>
UVa 442 Matrix Chain Multiplication(矩阵链,模拟栈)
查看>>
多种方法求解八数码问题
查看>>
spring mvc ModelAndView向前台传值
查看>>
(黑客游戏)HackTheGame1.21 过关攻略
查看>>
Transparency Tutorial with C# - Part 2
查看>>
android 文件上传
查看>>
ASCII 码表对照
查看>>
javascript的DOM操作获取元素
查看>>
Shuffle'm Up(串)
查看>>
微软职位内部推荐-Software Engineer II
查看>>
20145219 《Java程序设计》第06周学习总结
查看>>
C# 执行bat文件并取得回显
查看>>
基于YOLO的Autonomous driving application__by 何子辰
查看>>
javascript中的继承
查看>>