[USACO11JAN]大陆议会The Continental Cowngress_2-sat

题意:

由于对Farmer John的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会。

议会以“每头牛 都可以获得自己想要的”为原则,建立了下面的投票系统: M只到场的奶牛 (1 <= M <= 4000) 会给N个议案投票(1 <= N <= 1,000) 。每只 奶牛会对恰好两个议案 B_i and C_i (1 <= B_i <= N; 1 <= C_i <= N)投 出“是”或“否”(输入文件中的'Y'和'N')。

他们的投票结果分别为VB_i (VB_i in {'Y', 'N'}) and VC_i (VC_i in {'Y', 'N'})。 最后,议案会以如下的方式决定:每只奶牛投出的两票中至少有一票和最终结果相符合。 例如Bessie给议案1投了赞成'Y',给议案2投了反对'N',那么在任何合法的议案通过 方案中,必须满足议案1必须是'Y'或者议案2必须是'N'(或者同时满足)。

给出每只奶牛的投票,你的工作是确定哪些议案可以通过,哪些不能。

如果不存在这样一个方案, 输出"IMPOSSIBLE"。

如果至少有一个解,输出:

Y如果在每个解中,这个议案都必须通过

N 如果在每个解中,这个议案都必须驳回

? 如果有的解这个议案可以通过,有的解中这个议案会被驳回

分析:

2-sat裸题。

两票a,b至少有一票是对的,那么我们把false[a]连到true[b],把false[b]连到true[a]。

转化为图论问题。对于这道题,我们直接暴力枚举每个点是false/true进行dfs染色。

这个点不可能是false/true当且仅当它染色时同时染到了同一个点的true和false。

求出每个点作为false/ture的可能性,四种刚好对应题目要求。

代码:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <algorithm>
  4. using namespace std;
  5. #define N 2500
  6. #define M 45000
  7. int head[N],to[M],nxt[M],cnt,n,m;
  8. int mrk[N],Q[N],ans[N],l,r,vis[N];
  9. char s1[20],s2[20];
  10. inline void add(int u,int v){
  11. to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;
  12. }
  13. int bfs(int s){
  14. memset(vis,0,sizeof(vis));
  15. l=r=0;vis[s]=1;Q[r++]=s;
  16. while(l<r){
  17. int x=Q[l++];vis[x]=1;
  18. for(int i=head[x];i;i=nxt[i]){
  19. if(vis[to[i]])continue;
  20. Q[r++]=to[i];vis[to[i]]=1;
  21. }
  22. }
  23. for(int i=1;i<=n;i++){
  24. if(vis[i]&&vis[i+n])return 0;
  25. }return 1;
  26. }
  27. int main(){
  28. scanf("%d%d",&n,&m);
  29. int x,y,tx,ty;
  30. for(int i=1;i<=m;i++){
  31. scanf("%d%s%d%s",&x,s1,&y,s2);
  32. if(s1[0]=='Y')tx=1;else tx=0;
  33. if(s2[0]=='Y')ty=1;else ty=0;
  34. add((1-tx)*n+x,ty*n+y);
  35. add((1-ty)*n+y,tx*n+x);
  36. }
  37. for(int i=1;i<=n;i++){
  38. int t=bfs(i+n),f=bfs(i);
  39. if(t==0&&f==0){
  40. puts("IMPOSSIBLE");return 0;
  41. }
  42. if(t&&f)ans[i]=0;
  43. if(t&&!f)ans[i]=1;
  44. if(!t&&f)ans[i]=2;
  45. }
  46. for(int i=1;i<=n;i++){
  47. if(ans[i]==0)printf("?");
  48. else if(ans[i]==1)printf("Y");
  49. else printf("N");
  50. }
  51. }

[USACO11JAN]大陆议会The Continental Cowngress_2-sat的更多相关文章

  1. P3007 [USACO11JAN]大陆议会The Continental Cowngress

    P3007 [USACO11JAN]大陆议会The Continental Cowngress 题意: 给出 n 个法案, m 头牛的意见, 每头牛有两个表决 格式为 "支持或反对某法案&q ...

  2. [BZOJ 2199] [USACO11JAN] 大陆议会The Continental Cowngress(2-SAT)

    [BZOJ 2199] [USACO11JAN] 大陆议会The Continental Cowngress(2-SAT) 题面 题面较长,略 分析 考虑把问题转化成一个依赖性问题 我们把每只奶牛投出 ...

  3. Luogu P3007 [USACO11JAN]大陆议会The Continental Cowngress

    P3007 [USACO11JAN]大陆议会The Continental Cowngress 题意 题意翻译 简述:给出\(n\)个法案,\(m\)头牛的意见,每头牛有两个表决格式为"支持 ...

  4. P3007 [USACO11JAN]大陆议会The Continental Cowngress(2-SAT)

    简述:给出 n 个法案, m 头牛的意见, 每头牛有两个表决 格式为 “支持或反对某法案”, 每头牛需要至少满足一个表决, 不可能成立的话输出 IMPOSSIBLE, 否则输出方案, Y代表能, N代 ...

  5. 智课雅思词汇---十二、vent是什么意思

    智课雅思词汇---十二.vent是什么意思 一.总结 一句话总结:词根:ven, vent = come, 表示“来” 词根:vent = wind 风 1.tact是什么意思? 词根:-tact-, ...

  6. HIT 1917 2—SAT

    题目大意:一国有n个党派,每个党派在议会中都有2个代表, 现要组建和平委员会,要从每个党派在议会的代表中选出1人,一共n人组成和平委员会. 已知有一些代表之间存在仇恨,也就是说他们不能同时被选为和平委 ...

  7. COGS1008. 贪婪大陆[树状数组 模型转换]

    1008. 贪婪大陆 ★★   输入文件:greedisland.in   输出文件:greedisland.out   简单对比时间限制:1 s   内存限制:128 MB 试题四:贪婪大陆  [题 ...

  8. 多边形碰撞 -- SAT方法

    检测凸多边形碰撞的一种简单的方法是SAT(Separating Axis Theorem),即分离轴定理. 原理:将多边形投影到一条向量上,看这两个多边形的投影是否重叠.如果不重叠,则认为这两个多边形 ...

  9. BZOJ1922 [Sdoi2010]大陆争霸

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

随机推荐

  1. BugFix:URL or HTTP headers are too long (IP=127.0.0.1)

    错误提示: URL or HTTP headers are too long (IP=127.0.0.1) com.caucho.server.dispatch.BadRequestException ...

  2. go语言时间比较

    local, _ := time.LoadLocation("Local") starttime, _ := time.ParseInLocation("2006-01- ...

  3. 对cordova插件配置文件plugin.xml的理解

    1.配置文件表头包括了插件id,是用于唯一标识插件的.同时插件配置了一个插件名称. 2.这个文件从工作机制,也就是js代码一直到native的java插件代码工作分成两个流程.第一个流程是从代码到插件 ...

  4. System.Drawing.image 与ImageSource 互转

    private BitmapSource bs(Bitmap bt) { IntPtr ip = bt.GetHbitmap(); BitmapSource bitmapSource = System ...

  5. Java学习导航

    由于最近在系统的重新学习Java,为了便于日后复习,给个人博客中Java内容做一个目录. Java基础:Java虚拟机(JVM) Java基础:内存模型 Java基础:JVM垃圾回收算法 Java基础 ...

  6. git-------基础(一)

    更改连接仓库只用操作一次(先删后加) (1)git remote rm origin                                  //若本地已经关联了一个远程库,则先删除已关联的 ...

  7. python+selenium 环境搭建以及元素定位

    在给公司同事给培训了WEB自动化框架,现在和大家分享交流下

  8. Nordic nRF51/nRF52开发环境搭建

    本文将详述Nordic nRF51系列(包括nRF51822/nRF51802/nRF51422等)和nRF52系列(包括nRF52832/nRF52810/nRF52840)开发环境搭建. 1. 强 ...

  9. TensorFlow源码安装

    前言 TensorFlow如果能二进制包安装,我真的不想选择自己编译,但是情况不由人,好不容易找到一台服务器,CPU不支持AVX指令集,安装的release版本运行到import tensorflow ...

  10. 【转】JavaScript 错误处理与调试——“错误处理”的注意要点

    try-catch语句 该语句最适合处理那些我们无法控制的错误,在明明白白地知道自己的代码会发生错误时,再使用该语句就不太合适了. ECMA-262第3版引入了try-catch语句,基本的语法如下所 ...