BZOJ2199: [Usaco2011 Jan]奶牛议会(2-SAT)
Time Limit: 10 Sec Memory Limit: 259 MB
Submit: 559 Solved: 360
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 Y 2 N
1 N 2 N
1 Y 3 Y
1 Y 2 Y
Sample Output
HINT
Source

- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<stack>
- #include<vector>
- #include<queue>
- #include<iostream>
- #define Pair pair<int,int>
- #define F first
- #define S second
- using namespace std;
- const int MAXN=1e6+;
- //#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?EOF:*p1++)
- char buf[<<],*p1=buf,*p2=buf;
- inline int read()
- { char c=getchar();int x=,f=;
- while(c<''||c>''){if(c=='-')f=-;c=getchar();}
- while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
- return x*f;
- }
- struct node
- {
- int u,v,w,nxt;
- }edge[MAXN];
- int head[MAXN],num=;
- int N,M;
- int vis[MAXN],ans[MAXN];
- inline void AddEdge(int x,int y)
- {
- edge[num].u=x;
- edge[num].v=y;
- edge[num].nxt=head[x];
- head[x]=num++;
- }
- int dfs(int x)
- {
- vis[x]=;
- for(int i=head[x];i!=-;i=edge[i].nxt)
- if(!vis[edge[i].v])
- dfs(edge[i].v);
- }
- int check(int x)
- {
- memset(vis,,sizeof(vis));
- dfs(x);
- if(x<=N&&vis[x]&&vis[x+N]) return ;
- if(x>N&&vis[x]&&vis[x-N]) return ;
- return ;
- }
- int main()
- {
- #ifdef WIN32
- freopen("a.in","r",stdin);
- #else
- #endif
- memset(head,-,sizeof(head));
- N=read(),M=read();
- for(int i=;i<=M;i++)
- {
- int a,b;char x,y;
- a=read();
- while(x!='Y'&&x!='N') x=getchar();
- b=read();
- while(y!='Y'&&y!='N') y=getchar();
- if(x=='Y')
- if(y=='Y') AddEdge(a+N,b),AddEdge(b+N,a);
- else AddEdge(a+N,b+N),AddEdge(b,a);
- else //x==N
- if(y=='Y') AddEdge(a,b),AddEdge(b+N,a+N);
- else AddEdge(a,b+N),AddEdge(b,a+N);
- x='';y='';
- }
- for(int i=;i<=N;i++)
- {
- int ans1=check(i);
- int ans2=check(i+N);
- if(ans1&&ans2) ans[i]=;//?
- else if(ans1) ans[i]=;//Y
- else if(ans2) ans[i]=;//N
- else {printf("IMPOSSIBLE\n");return ;}
- }
- for(int i=;i<=N;i++)
- {
- if(ans[i]==) putchar('?');
- else if(ans[i]==) putchar('Y');
- else if(ans[i]==) putchar('N');
- }
- return ;
- }
BZOJ2199: [Usaco2011 Jan]奶牛议会(2-SAT)的更多相关文章
- BZOJ2199[Usaco2011 Jan]奶牛议会——2-SAT+tarjan缩点
题目描述 由于对Farmer John的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会.议会以“每头牛 都可以获得自己想要的”为原则,建立了下面的投票系统: M只到场的奶牛 (1 <= M ...
- BZOJ2199: [Usaco2011 Jan]奶牛议会
趁此机会学了一下2-SAT. 以前的2-SAT都是用并查集写的,只能应用于极小的一部分情况,这次学了一正式的2-SAT,是用一张有向图来表示其依赖关系. 2-SAT的介绍参见刘汝佳<训练指南&g ...
- 【BZOJ2199】[Usaco2011 Jan]奶牛议会 2-SAT
[BZOJ2199][Usaco2011 Jan]奶牛议会 Description 由于对Farmer John的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会.议会以“每头牛 都可以获得自己想要 ...
- BZOJ 2199: [Usaco2011 Jan]奶牛议会
2199: [Usaco2011 Jan]奶牛议会 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 375 Solved: 241[Submit][S ...
- 【BZOJ2199】 [Usaco2011 Jan]奶牛议会
Description 由于对Farmer John的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会.议会以“每头牛 都可以获得自己想要的”为原则,建立了下面的投票系统: M只到场的奶牛 (1 & ...
- BZOJ 2199: [Usaco2011 Jan]奶牛议会 [2-SAT 判断解]
http://www.lydsy.com/JudgeOnline/problem.php?id=2199 题意:裸的2-SAT,但是问每个变量在所有解中是只能为真还是只能为假还是既可以为真又可以为假 ...
- BZOJ.2199.[USACO2011 Jan]奶牛议会(2-SAT)
题目链接 建边不说了.对于议案'?'的输出用拓扑不好判断,直接对每个议案的结果DFS,看是否会出现矛盾 Tarjan也用不到 //964kb 76ms #include <cstdio> ...
- 2199: [Usaco2011 Jan]奶牛议会 2-sat
链接 https://www.luogu.org/problemnew/show/P3007 https://www.lydsy.com/JudgeOnline/problem.php?id=2199 ...
- bzoj 1823: [JSOI2010]满汉全席 && bzoj 2199 : [Usaco2011 Jan]奶牛议会 2-sat
noip之前学的内容了,看到题竟然忘了怎么建图了,复习一下. 2-sat 大概是对于每个元素,它有0和1两种选择,必须选一个但不能同时选.这之间又有一些二元关系,比如x&y=1等等... 先把 ...
随机推荐
- [Postman]Cookies(12)
Postman的本机应用程序提供 MANAGE COOKIES 模式,允许您编辑与每个域关联的Cookie. 前往cookie经理 要打开MANAGE COOKIES模式,请单击“ 发送”按钮下的 ...
- 排序函数 sort() 和 高阶函数sorted()
· sorted():该函数第一个参数iterable为任意可以迭代的对象,key是用于比较的关键字,reverse表示排序结果是否反转. · L.sort():该函数的三个参数和 sorted() ...
- 选择IT事业,意味着终身学习
八月,炎阳如火. 前几天书记找我交流,问我离职的原因,我跟他仔细的分析了一下我的职业发展规划和我对于未来的预期,书记也向我分析了一下他所认为的原因,他说,无外乎是三个原因:第一个是钱的问题:第二个是行 ...
- mongo 字段重命名
执行语句 db.getCollection("A表").updateMany( {}, { $rename: { "A": "A1"} } ...
- SpringMvc参数传递中乱码问题
问题描述: 当传递中文参数到controller类时,无乱是get方式还是post方式都出现乱码 解决: 1.保证所有的页面编码都是utf-8,包括jsp页面,浏览器编码设置和eclipse的编码设置 ...
- 【jQuery】(5)---jQuery CSS
jQuery CSS 1.jQuery 文档操作方法 1.addClass() 方法: addClass() 方法向被选元素添加一个或多个类.该方法不会移除已存在的 clas ...
- Android--Service之AIDL传递系统基本类型数据
前言 前面讲解了Service的一些基本内容.但是对于绑定服务传递数据,只局限于本地服务,无法使用服务进行跨进程间的交互.如果需要用到跨进程交互的话,需要用到一个新的技术-AIDL,这篇博客就针对AI ...
- ZOJ Problem Set - 3708 Density of Power Network
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3708 #include <stdio.h> #include ...
- vue-14-less 语法的使用
vue-15-rem-less 在计算手机端页面的时候, 使用rem和less的方式, 可以方便的设置需要的大小等 1, 在index.html中添加rem的script 代码 在head中添加 &l ...
- mcrypt加密以及解密过程
Mcrypt库支持20多种加密算法和8种加密模式,具体可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来显示 Mcrypt扩展库可以实现加密解密功能 ...