POI 2001

根据宪法,Byteland民主共和国的公众和平委员会应该在国会中通过立法程序来创立。 不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍。

此委员会必须满足下列条件:

每个党派都在委员会中恰有1个代表,

如果2个代表彼此厌恶,则他们不能都属于委员会。

每个党在议会中有 2 个代表。代表从1编号到2n。编号为2i-1和2i的代表属于第i个党派。

任务:写一程序读入党派的数量和关系不友好的代表对,计算决定建立和平委员会是否可能,若行,则列出委员会的成员表。

输入格式
第一行有两个非负整数n和m。他们各自表示:党派的数量n和不友好的代表对 m。 接下来 m 行,每行为一对整数 a,b表示代表a,b互相厌恶。

输出格式
如果不能创立委员会,则输出信息NIE。若能够成立,则输出包括 n 个从区间 1 到 2n选出的整数,按升序写出,每行一个,这些数字为委员会中代表的编号。

如果委员会能以多种方法形成,程序可以只输出它们的某一个。

样例
样例输入
3 2
1 3
2 4
样例输出
1
4
5
数据范围与提示
1<=n<=8000,0<=m<=20000,1<=a<b<=2n

————————————————————————————————

2-SAT问题。用对称性解!

————————————————————————————————

  1. 1 #include<bits/stdc++.h>
  2. 2 using namespace std;
  3. 3 const int maxn=8010;
  4. 4 const int maxm=2e4+10;
  5. 5 struct edge
  6. 6 {
  7. 7 int u,v,nxt;
  8. 8 }e[maxm<<1];
  9. 9 int head[maxn<<1],js;
  10. 10 void addage(int u,int v)
  11. 11 {
  12. 12 e[++js].u=u;e[js].v=v;
  13. 13 e[js].nxt=head[u];head[u]=js;
  14. 14 }
  15. 15 int n,m;
  16. 16 int dfn[maxn<<1],low[maxn<<1],cnt,lt[maxn<<1],lts,st[maxn<<1],top;
  17. 17 void tarjan(int u)
  18. 18 {
  19. 19 dfn[u]=low[u]=++cnt;
  20. 20 st[++top]=u;
  21. 21 for(int i=head[u];i;i=e[i].nxt)
  22. 22 {
  23. 23 int v=e[i].v;
  24. 24 if(!dfn[v])
  25. 25 {
  26. 26 tarjan(v);
  27. 27 low[u]=min(low[u],low[v]);
  28. 28 }
  29. 29 else if(!lt[v]) low[u]=min(low[u],dfn[v]);
  30. 30 }
  31. 31 if(low[u]==dfn[u])
  32. 32 {
  33. 33 lt[u]=++lts;
  34. 34 while(st[top]!=u)lt[st[top--]]=lts;
  35. 35 --top;
  36. 36 }
  37. 37 }
  38. 38 int main()
  39. 39 {
  40. 40 scanf("%d%d",&n,&m);
  41. 41 for(int a,b,i=0;i<m;++i)
  42. 42 {
  43. 43 scanf("%d%d",&a,&b);
  44. 44 addage(a,b&1?b+1:b-1);
  45. 45 addage(b,a&1?a+1:a-1);
  46. 46 }
  47. 47 for(int i=1;i<=(n<<1);++i)
  48. 48 if(!dfn[i])tarjan(i);
  49. 49 for(int i=1;i<=n;++i)
  50. 50 {
  51. 51 if(lt[i<<1]==lt[(i<<1)-1])
  52. 52 {
  53. 53 printf("NIE");
  54. 54 return 0;
  55. 55 }
  56. 56 }
  57. 57 for(int i=1;i<=n;++i)
  58. 58 {
  59. 59 if(lt[i<<1]<lt[(i<<1)-1])
  60. 60 printf("%d\n",i<<1);
  61. 61 else printf("%d\n",(i<<1)-1);
  62. 62 }
  63. 63 return 0;
  64. 64 }

LOJ10097和平委员会的更多相关文章

  1. HDU 1814 Peaceful Commission / HIT 1917 Peaceful Commission /CJOJ 1288 和平委员会(2-sat模板题)

    HDU 1814 Peaceful Commission / HIT 1917 Peaceful Commission /CJOJ 1288 和平委员会(2-sat模板题) Description T ...

  2. 【POI2001】【HDU1814】和平委员会

    题面 Description 根据宪法,Byteland民主共和国的公众和平委员会应该在国会中通过立法程序来创立. 不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍. 此委员会必须满足下列条 ...

  3. [模板]2-SAT 问题&和平委员会

    tarjan的运用 this is a problem:link 2-SAT处理的是什么 首先,把「2」和「SAT」拆开.SAT 是 Satisfiability 的缩写,意为可满足性.即一串布尔变量 ...

  4. [POI2001]和平委员会

    题目描述 根据宪法,Byteland民主共和国的公众和平委员会应该在国会中通过立法程序来创立. 不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍. 此委员会必须满足下列条件: 每个党派都在委 ...

  5. COGS:313. [POI2001] 和平委员会

    313. [POI2001] 和平委员会 ★★☆   输入文件:spo.in   输出文件:spo.out   评测插件时间限制:1 s   内存限制:128 MB 题目描述 根据宪法,Bytelan ...

  6. HDU1814和平委员会

    题目大意: 有n对的人,编号从1-2*n,m对的人之间互相不喜欢,每对人中必徐选1个人加入和平委员会,求字典序最小的解 -------------------------------- 2-SAT问题 ...

  7. cogs 313. [POI2001] 和平委员会(2-SAT

    http://cogs.pro:8080/cogs/problem/problem.php?pid=pyzQimjkj 题意:有n个集合,每个集合有俩元素,要从n个中各选一个放一堆,但是有的俩不能同时 ...

  8. P5782-[POI2001]和平委员会【2-SAT】

    正题 题目链接:https://www.luogu.com.cn/problem/P5782 题目大意 \(n\)对人,每对之间恰好有一个人出席.\(m\)对仇恨关系表示两个人不能同时出席. 求是否有 ...

  9. HD1814Peaceful Commission(模板题)

    题目链接 题意: 和平委员会 根据宪法,Byteland民主共和国的公众和平委员会应该在国会中通过立法程序来创立. 不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍. 此委员会必须满足下列条 ...

随机推荐

  1. 5. Longest Palindromic Substring最大回文子串

    int sta = 0; int max = 1; public String longestPalindrome(String s) { /* 判断回文有两种: 1.最大回文子序列求长度: 用动态规 ...

  2. Android驱动-Java入门学习(java安装)

    在ubuntu 14.04上java开发环境. 下载 jdk-7u75-linux-x64.tar.gz 使用tar xvf jdk-7u75-linux-x64.tar.gz 解压 在/usr/li ...

  3. ta-lib安装问题

    不管是windows还是linux,直接使用pip install ta-lib都会出现各种各样的问题,如下图: 解决办法,从网上找了很多办法都不好用,最后发现直接从晚上down .whl的文件,然后 ...

  4. 笔记本使用网线连接可以进行ftp下载,但是通过wifi连接只能登陆不能下载的问题。

    环境: (1)服务器为阿里云服务器,有公网ip,有内网ip,公网和内网已经做了相关端口的映射,ftp服务器为FileZilla,ftp服务器被动模式已开启,防火墙已关闭 (2)ftp客户端为java写 ...

  5. 一张图看懂sql的各种join

    下图展示了 LEFT JOIN.RIGHT JOIN.INNER JOIN.OUTER JOIN 相关的 7 种用法.

  6. Spring用了哪些设计模式?

    设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结.总共有 23 种设计模式 使用设计模式是为了重用代码.让代码更容易被他人理解.保证代码可靠性. Spring用了哪些设计模 ...

  7. shell实现99乘法表

    #!/usr/bin/env sh for ((x=1;x<10;x++));do for ((y=1;x>=y;y++));do printf "${y}x${x}=$(exp ...

  8. Termux键盘配置

    通过编辑~/.termux/termux.properties配置 extra-keys = [\ ['ESC', 'CTRL', '&', '$', '!', '%', '<', '& ...

  9. C#处理医学图像(二):基于Hessian矩阵的医学图像增强与窗宽窗位

    根据本系列教程文章上一篇说到,在完成C++和Opencv对Hessian矩阵滤波算法的实现和封装后, 再由C#调用C++ 的DLL,(参考:C#处理医学图像(一):基于Hessian矩阵的血管肺纹理骨 ...

  10. 创建一个简单MyBatis程序

    文章目录 MyBatis基础 MyBatis 简介 创建一个MyBatis程序 1. 创建Java项目 2. 加载MyBatis包 3. 编写POJO类和映射文件 4.创建mybatis-config ...