/*
题意:给你一些边,每条边有一个值和一个运算符XOR OR AND求是否存在一些点使得所有的边根据这些运算符
可以符合条件的权值.
建边方式参考:http://blog.csdn.net/shuangde800/article/details/8876533
这种建边方式真好,以后就用这种了
0 -- 1
0 -- 0
1 -- 0
1 -- 1
根据预算符有矛盾就建两条边
因为这题中的c只有两种取值0,1,所以只需要计算一次就可以了
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define N 2100
#define NN 1100000
struct node
{
int u,v,w,next;
char s[5];
} bian[NN*8];
int head[N],yong,low[N],dfn[N],belong[N],ans,top,index,stac[N],vis[N];
void init()
{
memset(head,-1,sizeof(head));
yong=index=ans=top=0;
memset(vis,0,sizeof(vis));
memset(dfn,0,sizeof(dfn));
}
void addedge(int u,int v)
{
bian[yong].v=v;
bian[yong].next=head[u];
head[u]=yong++;
}
void tarjan(int u)
{
low[u]=dfn[u]=++index;
stac[++top]=u;
vis[u]=1;
int i;
for(i=head[u]; i!=-1; i=bian[i].next)
{
int v=bian[i].v;
if(!dfn[v])
{
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(vis[v])
low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u])
{
ans++;
int t;
do
{
t=stac[top--];
belong[t]=ans;
vis[t]=0;
}
while(t!=u);
}
}
int slove(int n)
{
int i;
for(i=0; i<n*2; i++)
if(!dfn[i])
tarjan(i);
// printf("%d\n",ans);
for(i=0; i<n; i++)
if(belong[i]==belong[i+n])
return 0;
return 1;
}
int main()
{
int n,m,i,u,v,w;
char s[5];
while(scanf("%d%d",&n,&m)!=EOF)
{
init();
for(i=0; i<m; i++)
{
scanf("%d%d%d%s",&u,&v,&w,s);
if(strcmp(s,"AND")==0)
{
if(w)
{
addedge(u,v);
addedge(v+n,u+n);//1,0
addedge(u+n,v+n);
addedge(v,u);//0,1
addedge(u+n,v);
addedge(v+n,u);//0,0
}
else
{
addedge(u,v+n);
addedge(v,u+n);
}
}
if(strcmp(s,"OR")==0)
{
if(w)
{
addedge(u+n,v);
addedge(v+n,u);
}
else
{
addedge(u,v);
addedge(v+n,u+n);//1,0
addedge(u+n,v+n);
addedge(v,u);//0,1
addedge(u,v+n);
addedge(v,u+n);//1,1
}
}
if(strcmp(s,"XOR")==0)
{
if(w)
{
addedge(u+n,v);
addedge(v+n,u);//0,0
addedge(u,v+n);
addedge(v,u+n);//1,1
}
else
{
addedge(u,v);
addedge(v+n,u+n);//1,0
addedge(u+n,v+n);
addedge(v,u);//0,1
}
}
}
if(slove(n))
printf("YES\n");
else
printf("NO\n");
}
return 0;
}

poj 3678 XOR和OR和AND(简单2-sat问题)的更多相关文章

  1. POJ 3678 Katu Puzzle(2-SAT,合取范式大集合)

    Katu Puzzle Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9987   Accepted: 3741 Descr ...

  2. HDU 3062 && HDU 1824 && POJ 3678 && BZOJ 1997 2-SAT

    一条边<u,v>表示u选那么v一定被选. #include <iostream> #include <cstring> #include <cstdio> ...

  3. poj 3678 Katu Puzzle(2-sat)

    Description Katu Puzzle ≤ c ≤ ). One Katu ≤ Xi ≤ ) such that for each edge e(a, b) labeled by op and ...

  4. POJ 3678 Katu Puzzle 2-SAT 强连通分量 tarjan

    http://poj.org/problem?id=3678 给m条连接两个点的边,每条边有一个权值0或1,有一个运算方式and.or或xor,要求和这条边相连的两个点经过边上的运算后的结果是边的权值 ...

  5. 基础但是很重要的2-sat POJ 3678

    http://poj.org/problem?id=3678 题目大意:就是给你n个点,m条边,每个点都可以取值为0或者1,边上都会有一个符号op(op=xor or and三种)和一个权值c.然后问 ...

  6. poj 3678 Katu Puzzle(Two Sat)

    题目链接:http://poj.org/problem?id=3678 代码: #include<cstdio> #include<cstring> #include<i ...

  7. POJ 3678 Katu Puzzle (2-SAT)

                                                                         Katu Puzzle Time Limit: 1000MS ...

  8. poj 3678(SCC+2-SAT)

    传送门:Problem 3678 https://www.cnblogs.com/violet-acmer/p/9769406.html 难点: 题意理解+构图 题意: 有n个点 v[0,2..... ...

  9. POJ 3678 Katu Puzzle (经典2-Sat)

    Katu Puzzle Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6553   Accepted: 2401 Descr ...

随机推荐

  1. AJPFX总结OpenJDK 和 HashMap大量数据处理时,避免垃圾回收延迟的技巧二

    HashMap简史 “Hash Code”这个概念第一次出现是在1953年1月的<Computing literature>中,H. P. Luhn  (1896-1964) 在一篇 IB ...

  2. BBS项目总结

    数据库(Oracle): BBSUserid:主键username:用户名password:密码pic:头像 blobpagenum:每个人分页喜好数量,每页显示多少行 Article :ID:主键, ...

  3. 你有学习者综合征吗?Web 开发是重灾区

    [导读]:学习者综合征的主要表现:学而不用,不停学习,却没有真正实际应用知识来做东西.如果过去的一年里,学习的语言或框架超过三个,那可能已经感染学习者综合征了.Web 开发是重灾区咯. 你有学习者综合 ...

  4. tar.bz2

    tar -xvjf gcc-4.1.0.tar.bz2 bzip2 -d  gcc-4.1.0.tar.bz2

  5. sql语句分为三类(DML,DDL,DCL)-介绍

    本文知识来源自:<Oracle专家高级编程> 分享作者:Vashon 时间:20150415 DDL is Data Definition Language statements. Som ...

  6. .net4.5注册到iis

    开始->所有程序->附件->鼠标右键点击“命令提示符”->以管理员身份运行->%windir%\Microsoft.NET\Framework\v4.0.30319\as ...

  7. 8.3.3 快速系统调用 —— XP SP3上SystemCallStub的奇怪问题

    依书上的例子,ReadFile()函数会调用ntdll!NtReadFile(),后者将服务号放到eax之中,然后调用SharedUserData!SystemCallStub(),由此函数执行sys ...

  8. javaee 第五周作业

    一.Ajax技术 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. ...

  9. systemtap执行过程中报probe timer.profile registration error

    probe timer.profile registration error 今天在执行火焰图的过程中,代码报错,probe timer.profile registration error 经过查询 ...

  10. Codeforces Gym 2015 ACM Arabella Collegiate Programming Contest(二月十日训练赛)

    A(By talker): 题意分析:以a(int) op b(int)形式给出两个整数和操作符, 求两个整数是否存在操作符所给定的关系 ,有则输出true,无则输出false: 思路:由于无时间复杂 ...