BZOJ.2199.[USACO2011 Jan]奶牛议会(2-SAT)
建边不说了。对于议案'?'的输出用拓扑不好判断,直接对每个议案的结果DFS,看是否会出现矛盾
Tarjan也用不到
//964kb 76ms
#include <cstdio>
#include <cstring>
#include <algorithm>
const int N=2005,M=16005;
int n,m,Enum,H[N],nxt[M],to[M],conf[N];//conflict
bool vis[N];
char ans[N];
inline void AddEdge(int u,int v){
to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;
}
bool DFS(int x)
{
// if(vis[x+delta*n]) return 0;//WA:由i+n集合会到j集合 我怎么想的。。
if(vis[conf[x]]) return 0;
vis[x]=1;
for(int i=H[x]; i; i=nxt[i])
if(!vis[to[i]])
if(!DFS(to[i])) return 0;
return 1;
}
//void dfs(int x)//slow
//{
// vis[x]=1;
// for(int i=H[x]; i; i=nxt[i])
// if(!vis[to[i]]) dfs(to[i]);
//}
//bool DFS(int x,int delta)
//{
// dfs(x);
// for(int i=1; i<=n; ++i)
// if(vis[i]&&vis[i+n]) return 0;
// return 1;
//}
int main()
{
scanf("%d%d",&n,&m);
int a,c; char b[3],d[3];
for(int i=1; i<=m; ++i)
{
scanf("%d%s%d%s",&a,b,&c,d);
if(b[0]=='Y')//i:false(N) i+n:true(Y)
if(d[0]=='Y') AddEdge(a,c+n),AddEdge(c,a+n);
else AddEdge(a,c),AddEdge(c+n,a+n);
else if(b[0]=='N')
if(d[0]=='Y') AddEdge(a+n,c+n),AddEdge(c,a);
else AddEdge(a+n,c),AddEdge(c+n,a);
}
for(int i=1; i<=n; ++i) conf[i]=i+n,conf[i+n]=i;
for(int r1,r2,i=1; i<=n; ++i)
{
memset(vis,0,sizeof vis), r1=DFS(i);
memset(vis,0,sizeof vis), r2=DFS(i+n);
if(!r1&&!r2) {printf("IMPOSSIBLE"); return 0;}
else if(r1&&r2) ans[i]='?';
else if(r1) ans[i]='N';
else ans[i]='Y';
}
ans[n+1]='\0', printf("%s",ans+1);
return 0;
}
BZOJ.2199.[USACO2011 Jan]奶牛议会(2-SAT)的更多相关文章
- BZOJ 2199: [Usaco2011 Jan]奶牛议会
2199: [Usaco2011 Jan]奶牛议会 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 375 Solved: 241[Submit][S ...
- bzoj 1823: [JSOI2010]满汉全席 && bzoj 2199 : [Usaco2011 Jan]奶牛议会 2-sat
noip之前学的内容了,看到题竟然忘了怎么建图了,复习一下. 2-sat 大概是对于每个元素,它有0和1两种选择,必须选一个但不能同时选.这之间又有一些二元关系,比如x&y=1等等... 先把 ...
- BZOJ 2199: [Usaco2011 Jan]奶牛议会 [2-SAT 判断解]
http://www.lydsy.com/JudgeOnline/problem.php?id=2199 题意:裸的2-SAT,但是问每个变量在所有解中是只能为真还是只能为假还是既可以为真又可以为假 ...
- bzoj 2199: [Usaco2011 Jan]奶牛议会【2-SAT】
好久没写2-SAT了啊,还以为是网络流 设点x为选,x'为不选,因为一头牛至少要满足一个条件,所以对于牛条件的两个点,选了一个不符合的点,就要选另一个符合的点,这样连两条边 然后枚举所有议案的选和不选 ...
- 2199: [Usaco2011 Jan]奶牛议会 2-sat
链接 https://www.luogu.org/problemnew/show/P3007 https://www.lydsy.com/JudgeOnline/problem.php?id=2199 ...
- 【BZOJ2199】[Usaco2011 Jan]奶牛议会 2-SAT
[BZOJ2199][Usaco2011 Jan]奶牛议会 Description 由于对Farmer John的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会.议会以“每头牛 都可以获得自己想要 ...
- 【BZOJ2199】 [Usaco2011 Jan]奶牛议会
Description 由于对Farmer John的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会.议会以“每头牛 都可以获得自己想要的”为原则,建立了下面的投票系统: M只到场的奶牛 (1 & ...
- BZOJ2199: [Usaco2011 Jan]奶牛议会(2-SAT)
Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 559 Solved: 360[Submit][Status][Discuss] Descriptio ...
- BZOJ2199[Usaco2011 Jan]奶牛议会——2-SAT+tarjan缩点
题目描述 由于对Farmer John的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会.议会以“每头牛 都可以获得自己想要的”为原则,建立了下面的投票系统: M只到场的奶牛 (1 <= M ...
随机推荐
- 默认以管理员身份运行VS2013/15/17
方法如下: 1.右击VS的快捷方式,选择[属性],打开属性对话框,再点击[高级]按钮,如下图所示: 2.再勾选[用管理员身份运行],点击[确定]即可: 然后就可以双击VS快捷方式,直接以管理员身份运行 ...
- nagios系列(一)centos6.5环境部署nagios服务端
nagios软件安装包存放目录:/home/oldboy/tools nagios服务安装目录:/usr/local/nagios 1.配置yum源 echo "------ step 1: ...
- 多CPU,多核,多进程,多线程
当面临这些问题的时候,有两个关键词无法绕开,那就是并行和并发. 首先,要先了解几个概念: 1.进程是程序的一次执行. 2.进程是资源分配的基本单位(调度单位). 3.一个进程可以包括多个线程. 4.在 ...
- strchr()的用法
strchr()主要有2个最有用的用法: 第一个:搜索字符串在另一字符串中的第一次出现.并返回剩余的部分 $str = "hello_chrdai_1993"; $not_incl ...
- 使用super调用父类的构造方法
package com.bjpowernode.t02inheritance.c09; /* * 使用super调用父类的构造方法 */public class TestSuper02 { publi ...
- JavaScript脚本的两种放置方式
JavaScript脚本的两种放置方式 1在body里用 script标签引用 2 直接写在<script></script>标签之中
- 2017-2018-2 20155225《网络对抗技术》实验五 MSF基础应用
2017-2018-2 20155225<网络对抗技术>实验五 MSF基础应用 ms08_067 用search命令,搜索与ms08_067相关的模块,如图: 找到了对应的攻击模块expl ...
- .NetCore源码阅读笔记系列之Security (三) Authentication & AddOpenIdConnect
通过第二篇文章我们已经知道了授权的内部实现通过自定义的授权Handler来的,同样的道理 OpenIdConnect 同样是通过 OpenIdConnectHandler来请求授权的 那么它内部又是怎 ...
- 简易图书管理系统(主要是jsp的练习)
1:首先设计用户表和图书表,设计的字段和类型如下图所示 1.1:用户表user 1.2:图书表book 2:第二写实体类user.java和book.java package com.bie.po; ...
- 快速构建ceph可视化监控系统
https://my.oschina.net/colben/blog/1844602 https://my.oschina.net/u/3626804/blog/1859613