题面

  HDU1814

解析

  2-sat裸题, 求字典序最小的解

  我一开始试图用拓扑序求字典序最小的解,YY了一阵,打完代码,无论如何都要WA,于是弃疗了,至今不知为什么会错,也许是我太菜了吧,于是学习了一下dfs构造字典序最小解的方法,时间复杂度是O(nm)的

  基本思路同拓扑序构造可行解一样,用染色法。但dfs是直接在原图中跑的,因此要传递选择的标记,也就是颜色。从小到大对每一个没有染色的点$j$尝试染上选择的颜色,在对称点$j'$(点$j$的编号小于点$j'$的编号)上染上不选的颜色,传递选择颜色时如果没有遇到不选的颜色,说明染色方案成功,否则失败,再给点$j'$染上选择的颜色 ,点$j$染上不选的颜色,进行相同操作,如果仍然失败,则说明该情况没有可行解。

  HDU上有一个坑点:多组数据。(我的英语菜得不谈,这个东西搞了我半个小时)

 代码:

#include<cstdio>
#include<vector>
using namespace std;
const int maxn = 8006;int n, m, stak[maxn], top, col[maxn<<1];
vector<int> G[maxn<<1];int mir(int x)
{return x&1? x+1: x-1;
}bool paint(int x)
{if(col[x])return col[x] == 1;col[x] = 1;col[mir(x)] = 2;stak[++top] = x;for(unsigned int i = 0; i < G[x].size(); ++i){int id = G[x][i];if(!paint(id))return 0;}return 1;
}bool work()
{for(int i = 1; i <= (n<<1); ++i)if(!col[i]){top = 0;if(!paint(i)){while(top)  col[stak[top]] = col[mir(stak[top])] = 0, top--;if(!paint(mir(i)))return 0;}}return 1;
}int main()
{while(scanf("%d%d", &n, &m) != EOF){for(int i = 1; i <= m; ++i){int x, y;scanf("%d%d", &x, &y);G[x].push_back(mir(y));G[y].push_back(mir(x));}if(work()){for(int i = 1; i <= (n<<1); ++i)if(col[i] == 1)printf("%d\n", i);}elseprintf("NIE\n");for(int i = 1; i <= (n<<1); ++i)G[i].clear(), col[i] = 0;}return 0;
}

View Code

转载于:https://www.cnblogs.com/Joker-Yza/p/11312672.html

[POI2001] 和平委员会 Peaceful Commission——2-sat(dfs构造字典序最小解)相关推荐

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

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

  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. HDU1814和平委员会

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

  4. hdu1814 Peaceful Commission,2-sat

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

  5. HDOJ 1814 Peaceful Commission

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

  6. hdu1814 Peaceful Commission 2-sat

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

  7. HDU 1814 Peaceful Commission(2-SAT)

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

  8. hdu1814 Peaceful Commission 2-SAT建图入门

    题面 The Public Peace Commission should be legislated in Parliament of The Democratic Republic of Byte ...

  9. [HDU 1814] Peaceful Commission

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

  10. hdu 1814 Peaceful Commission 题解

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

最新文章

  1. ubuntu 安装yum_如何在 Linux 中安装微软的 .NET Core SDK | Linux 中国
  2. poj 3255 Roadblocks (SPFA)
  3. 局部保留投影(LPP)推导
  4. 走进武汉,探索多媒体开发最佳实践
  5. LeetCode 1286. 字母组合迭代器(回溯/位运算)
  6. Java描述设计模式(18):享元模式
  7. Redis如何做内存优化?
  8. html上传文件是否合法,java 在前端页面上传图片文件,验证是否为合法的图片
  9. 对多个有规律表进行更新剔重复操作的存储过程(up8000)
  10. R中的 url编码 和 解码
  11. 又出现*_limited.sof的问题了,还有另一个奇怪的现象!
  12. 查找单词个数案列实现(字符串流)
  13. JavaWeb知识点复习(第一次)
  14. Django 项目部署
  15. 第24章 QSPI—读写串行FLASH
  16. 修改Office 2016安装路径的方法
  17. 机器学习模型评估——混淆矩阵
  18. 【小游戏】Flappy bird
  19. CentOS7下的LAMP搭建
  20. 【Android -- 蓝牙】打开蓝牙和设备搜索

热门文章

  1. java中修改对象类的数据_Java中创建对象的六个步骤 细分后(new关键字)对象头详细介绍...
  2. java lambda_Java 8 Lambda 表达式 ( 中 )- 外部参数
  3. chown: 无效的用户: hadoop-3.1.4_Ubuntu 21.04 用户主目录权限将14年来首次变更及新功能预览...
  4. linux复习题之阶段性考试题目
  5. 获取本地文件所需配置
  6. MyBatis sql查询字段问题
  7. Android 控件 之 菜单(Menu)
  8. java镜像_012 制作Java基础镜像
  9. Unity3D 调用Java,Java调用Unity3D
  10. [转]Hibernate不能自动建表解决办法及Hibernate不同数据库的连接及SQL方言