首页 技术 正文
技术 2022年11月10日
0 收藏 354 点赞 2,806 浏览 1437 个字

【题目大意】

给出有向图G(V, E),每条边(a,b)有一个值c(c=0或1)和运算符op,问能否找到这一张有向图,满足所有的a op b=c?

【思路】

显然是2-SAT。不过要注意一定,如a and b=1,若a=0是必定无解的。像这种情况,要连边a+n->a;同理所有类似于a or b=0,也要两边a->a+n。即无解清新要保证自己连到自己的相反情形。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<stack>
using namespace std;
const int MAXN=+;
vector<int> E[MAXN];
stack<int> s;
int low[MAXN],dfn[MAXN],cnt=,bcnt=;
int instack[MAXN],b[MAXN];
int n,m; void addedge(int u,int v)
{
E[u].push_back(v);
} void tarjan(int u)
{
dfn[u]=low[u]=++cnt;
instack[u]=;
s.push(u);
for (int i=;i<E[u].size();i++)
{
int to=E[u][i];
if (!instack[to]) tarjan(to),low[u]=min(low[u],low[to]);
else if (instack[to]==) low[u]=min(low[u],dfn[to]);
} if (dfn[u]==low[u])
{
int x;
++bcnt;
do
{
x=s.top();s.pop();
instack[x]=;
b[x]=bcnt;
}while (x!=u);
}
} void init()
{
scanf("%d%d",&n,&m);
for (int i=;i<m;i++)
{
int a,b,c;char op[];
scanf("%d%d%d%s",&a,&b,&c,op);
a++,b++;
if (op[]=='A')
{
if (c==) addedge(a,b+n),addedge(b,a+n);
if (c==) addedge(a,b),addedge(b,a),addedge(a+n,a),addedge(b+n,b);
}
if (op[]=='O')
{
if (c==) addedge(a+n,b+n),addedge(b+n,a+n),addedge(a,a+n),addedge(b,b+n);
if (c==) addedge(a+n,b),addedge(b+n,a);
}
if (op[]=='X')
{
if (c==) addedge(a,b),addedge(b,a),addedge(a+n,b+n),addedge(b+n,a+n);
if (c==) addedge(a+n,b),addedge(b+n,a),addedge(a,b+n),addedge(b,a+n);
}
}
} void solve()
{
memset(instack,,sizeof(instack));
for (int i=;i<=*n;i++) if (!instack[i]) tarjan(i);
int flag=;
for (int i=;i<=n;i++)
if (b[i]==b[i+n])
{
flag=;
break;
}
puts(flag?"YES":"NO");
} int main()
{
init();
solve();
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,491
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,492
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,294