题目传送门

题目大意: 有 nnn 个团队,每个团队两个人,现在要组成一个 nnn 人的组织,要求每个团队中只能有 111 个人在组织里,给出 mmm 组憎恶关系,相互憎恶的两人不能同时在组织里,给出一种组成组织的方案。

题解

2−SAT2-SAT2−SAT 裸题,同一个团队的两人其实分别代表 0/10/10/1,根据憎恶关系造出图后,从编号小的团队开始跑,先跑团队中的 000,把能跑到的点都加入组织,假如和之前的方案有冲突,就尝试跑 111,如果依然有冲突,那么无解。

由于之前做的决策不会影响到答案的可行性,所以每次只考虑调整自己而不需要考虑前面的决策。具体来说就是不存在这类情况:前面团队 iii 选了 000,枚举到 jjj 的时候发现不管选 000 还是 111 都和 iii 有冲突,即从 j0j_0j0​ 和 j1j_1j1​ 出发都会走到 i1i_1i1​

看起来好像是之前的决策出了问题,即团队 iii 不应该选 000 而应该选 111,但事实上,考虑 2−SAT2-SAT2−SAT 的建边规则,然后手玩一下就会发现,如果 j0j_0j0​ 和 j1j_1j1​ 都能走到 i1i_1i1​,那么 i0i_0i0​ 就能同时走到 j0j_0j0​ 和 j1j_1j1​,在这种情况下,团队 iii 不可能选 000。

于是代码如下:

#include <cstdio>
#include <cstring>
#define maxn 20010int n,m;
struct edge{int y,next;};
edge e[maxn<<1];
int first[maxn],len=0;
void buildroad(int x,int y){e[++len]=(edge){y,first[x]};first[x]=len;}
int kk(int x){return x%2==1?x+1:x-1;}
bool v[maxn];
int zhan[maxn],t;
bool dfs(int x)
{if(v[x])return true;if(v[kk(x)])return false;v[x]=true;zhan[++t]=x;for(int i=first[x];i;i=e[i].next)if(!dfs(e[i].y))return false;return true;
}
bool two_SAT()
{for(int i=1;i<=2*n;i++){if(v[i]||v[kk(i)])continue;t=0;if(!dfs(i)){while(t)v[zhan[t--]]=false;if(!dfs(kk(i)))return false;}}return true;
}int main()
{while(~scanf("%d",&n)){scanf("%d",&m);memset(first,0,sizeof(first));len=0;for(int i=1,x,y;i<=m;i++)scanf("%d %d",&x,&y),buildroad(x,kk(y)),buildroad(y,kk(x));memset(v,false,sizeof(v));if(two_SAT()){for(int i=1;i<=2*n;i++)if(v[i])printf("%d\n",i);}else printf("NIE\n");}
}

hdu 1814 Peaceful Commission 题解相关推荐

  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. HDU 1814 Peaceful Commission(2-SAT)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1814 题意: 要建立一个和平委员会,要满足以下条件: 每个党派都在委员会中恰有1个代表, ...

  3. HDU 1814 Peaceful Commission

    2-SAT,输出字典序最小的解,白书模板. //TwoSAT输出字典序最小的解的模板 //注意:0,1是一组,1,2是一组..... #include<cstdio> #include&l ...

  4. [HDU 1814] Peaceful Commission

    一.题目 点此看题 二.解法 这就是2-sat\text{2-sat}2-sat带字典序最小解的经典问题,时间复杂度O(n2)O(n^2)O(n2),还是结合代码讲更好: #include <c ...

  5. HDOJ 1814 Peaceful Commission

    经典2sat裸题,dfs的2sat能够方便输出字典序最小的解... Peaceful Commission Time Limit: 10000/5000 MS (Java/Others)    Mem ...

  6. [hdu-1814] Peaceful Commission题解

    题目传送门 题意解析:题目就是给了你n组,每一组有两个人,然后在给你m组关系,关系x,y表示x和y不能在放一起,然后让你在每组中各取出一个人,找出字典序最小的一组方案(原题是任意一组方案,但是hdu上 ...

  7. hdu1814 Peaceful Commission 2-sat

    hdu1814 Peaceful Commission 链接 emm,三个链接,三个都不同 loj随便做 hdu字典序最小 bzoj求合法方案数 思路 loj是任意一组解,直接跑tarjan然后判. ...

  8. [2-sat专练]poj 3683,hdu 1814,hdu 1824,hdu 3622,hdu 4115,hdu 4421

    文章目录 Priest John's Busiest Day code Peaceful Commission code Let's go home code Bomb Game code Elimi ...

  9. HDU各种比赛题题解(一)

    HDU各种比赛题题解(一) Gardon-DYGG Contest 1 HDU1178 Heritage from father[水题] - 海岛Blog - CSDN博客 HDU1181 变形课[D ...

最新文章

  1. ROCK 聚类算法‏
  2. [python]两种编程思维--面向过程和面向对象
  3. Ubuntu12.04安装jdk1.6.0
  4. acegis连接使用方法_正确打开效果器 连接方法和使用技巧必须要知道
  5. Java jmap查看堆内存
  6. python bool值要注意的一些地方
  7. 在 “相对” 高薪面前,任何的喊冤叫屈都是苍白无力的
  8. react 判断图片是否加载完成_React中型项目的优化实践
  9. java通用异常_Java常用异常整理
  10. 例子 类的定义与对象的创建 狗的例子
  11. word中的表格空白部分整不掉,下面的表格拉不上来
  12. 黑白块游戏java代码_用java做的一个小游戏—黑白反斗棋(适合菜鸟)
  13. 计算机启动灯光提示,为什么我的电脑开机时指示灯为黄色并不断闪烁,且开不开机?...
  14. 阿里云服务器遭ddos攻击防御案例
  15. Kafka高频面试题:夺命10连问
  16. 0402网络基础--查看及测试网络连通、IP地址、IPv6、子网划分
  17. 异常检测方法——DBSCAN、孤立森林、OneClassSVM、LOF、同比环比、正态分布、箱线图
  18. 唯品会web前端实习生一面二面经
  19. uva 11021 数学概率 麻球
  20. css 外弧_CSS绘制圆(弧)

热门文章

  1. 基于ArduPilot的旋翼式无人机飞行器开发系列(一,入门)
  2. VUE + TS 开发实践
  3. ECCV 2020 论文大盘点-图像视频修复篇
  4. 给中国学生的第三封信(李开复)
  5. matlab时间是不是毫秒,matlab – 将毫秒转换为小时和绘图
  6. stm32驱动LCD12864液晶屏驱动程序,亲测可行,复制直接能用!
  7. latex中文论文模板_西安建筑科技大学LaTeX学位论文模板 v1.0.0 beta
  8. 详解Guitar Pro显示和弦图的步骤
  9. 高斯白噪声中CW,LFM脉冲检测,定量画ROC曲线
  10. 应用最广泛的8位单片机当然也是初学者们最容易上手学习的单片机