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


My opinion:一开始看到的时候毫无头绪,所以除了暴力完全不会。然后想了想,可以发现如果一个人u和另一个人v有矛盾的话,那么如果选了u,那么一定要选和v是同一组的人,这样我们就可以把u和和v是同一组的人连一条边,这样可以排除很多方案数,可以还是会TLE。
直到看到了一篇论文:由对称性解2-sat问题
这题就是样例!!!!

这次直接上代码了:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=a;i>=n;i--)
#define Clear(a,x) memset(a,x,sizeof(a))
#define ll long long
#define INF 2000000000
#define eps 1e-8
using namespace std;
int read(){int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9') f=ch=='-'?-1:f,ch=getchar();while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();return x*f;
}
const int maxn=10005;
vector<int> G[maxn<<1];
bool flag[maxn<<1];
int q[maxn<<1];
int n,m,top;
bool dfs(int u){if (flag[u^1]) return false;if (flag[u]) return true;flag[u]=1;q[top++]=u;int len=G[u].size()-1;rep(i,0,len)if (!dfs(G[u][i])) return false;return true;
}
bool two_sat(){Clear(flag,0);for (int i=0;i<n;i+=2)if (!flag[i]&&!flag[i^1]){top=0;if (!dfs(i)){while (top) flag[q[--top]]=0;if (!dfs(i^1)) return false;}}return true;
}
int main(){while (~scanf("%d%d",&n,&m)){n*=2;rep(i,0,n-1) G[i].clear();while (m--){int u=read(),v=read();u--,v--;G[u].push_back(v^1);G[v].push_back(u^1);}if (two_sat()){for (int i=0;i<n;i+=2)if (flag[i]) printf("%d\n",i+1);else printf("%d\n",(i^1)+1);}else puts("NIE");}return 0;
}

神奇,至少我是这么觉得的。

[hdu-1814] Peaceful Commission题解相关推荐

  1. hdu 1814 Peaceful Commission 题解

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

  2. 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 ...

  3. HDU 1814 Peaceful Commission(2-SAT)

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

  4. HDU 1814 Peaceful Commission

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

  5. [HDU 1814] Peaceful Commission

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

  6. HDOJ 1814 Peaceful Commission

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

  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. 协程Coroutines入门
  2. 电脑亮度多少对眼睛好_鲁大师性能测试多少分算好电脑?
  3. 递归函数非递归化_递归神秘化
  4. 浅析Vue.js 中的条件渲染指令
  5. CAD零基础入门自学教程
  6. mBlock机器人组装教程_mbot机器人如何搭建?mBot机器人套件快速搭建指南
  7. matlab 另存为excel_将matlab数据保存为excel文件
  8. 黑群晖二合一已损毁_手动修复黑群晖已损毁磁盘空间
  9. Solving environment: failed
  10. 一个疯狂的地下市场--支付牌照的买卖
  11. 常与同好争高下,不与傻瓜论短长
  12. Codeforces Round #439 (Div. 2) Problem C (Codeforces 869C) - 组合数学
  13. WPF DataGridTable
  14. Linux下使用Curl调用Java的WebService接口
  15. 支付宝/云闪付个人免签
  16. 全国最新各省、市、县、镇、村数据库,详细到村的数据
  17. 凤凰新闻客户端恢复更新!刘爽发出内部信重新出发
  18. 蚁视牵手联创互联,可持续拓展“第六媒体”新业态
  19. oracle 报错ins 32008,oracle升级报错ins—32027
  20. php课后答案 唐四薪_智慧树答案大全WEB程序设计(PHP)课后作业答案

热门文章

  1. FMS4.5 (Flash media server)视频服务器安装和配置以及pomelo聊天室的调用
  2. 点投影到平面上的方法总结
  3. 【MyBatis】关联查询
  4. ubuntu安装python3.6_Ubuntu 16.04上安装和使用Python3.6
  5. Vue.config.js开发环境与生产环境配置
  6. linux 压缩保持属性不变,linux文件压缩
  7. 如何测试视频会议的延迟
  8. java实现踢下线用户_浅谈踢人下线的设计思路!(附代码实现方案)
  9. Java编写猜单词游戏
  10. Android实用小代码