题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1814

题意: 有(1,2),(3,4), ...(2n-1,2n),n对数,要在每对中选出一个共n个,并且满足m个约束条件,条件(a,b)表示ab不能同时被选,按字典序输出答案,无解输出NIE

分析: Two_Sat问题,假设A,A‘为一对,B,B'为一对,那么对于约束条件(A,B),在选A的时候必须选B’,选B的时候必选选A‘,加边A->B',B->A'

模板用的是大白书上的,跑出来直接是字典序,mark为true即为取当前值。

#include <iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<vector>
#define maxn 8005
using namespace std;
struct TwoSAT{int n;vector<int> G[maxn*2];bool mark[maxn*2];int S[maxn*2],c;bool dfs(int x){if(mark[x^1])return false;if(mark[x])return true;mark[x]=true;S[c++]=x;for(int i=0;i<G[x].size();i++)if(!dfs(G[x][i]))return false;return true;}void init(int n){this->n=n;for(int i=0;i<n*2;i++)G[i].clear();memset(mark,0,sizeof(mark));}void add_clause(int x,int y){G[x].push_back(y^1);G[y].push_back(x^1);}bool solve(){for(int i=0;i<n*2;i+=2)if(!mark[i]&&!mark[i+1]){c=0;if(!dfs(i)){while(c>0)mark[S[--c]]=false;if(!dfs(i+1))return false;}}return true;}void print(){if(!solve())printf("NIE\n");else {for(int i=0;i<n;i++){if(mark[i*2])printf("%d\n",i*2+1);elseprintf("%d\n",i*2+2);}}}
};
int main()
{int n,m,x,y;while(~scanf("%d%d",&n,&m)){TwoSAT T;T.init(n);while(m--){scanf("%d%d",&x,&y);T.add_clause(x-1,y-1);}T.print();}return 0;
}

HDU 1814 Two_Sat相关推荐

  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 题解

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

  4. hdu 1814 字典序最小的2sat(暴力深搜)

    题意:      题意就是最基础的2sat,关系只有矛盾关系,然后二选一,关键是这个题目是输出字典序最小的那组解. 思路:      输出字典序最小,用强连通那个实现不了(起码没看到有人实现),其实我 ...

  5. HDU 1814 Peaceful Commission

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

  6. [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 ...

  7. HDU 1814(染色)

    题目大意 有n个党派,每个党派2个人,这2*n个人之间存在一些敌对关系,现在要从中选出n个人组成一个委员会,要求满足: 1.每个党派中选1个 2.委员会中不存在敌对关系 分析 题目中第i个党派的成员编 ...

  8. [HDU 1814] Peaceful Commission

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

  9. [kuangbin]各种各样的题单

    [kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...

  10. (转)2-sat 专题

    [2-sat]专题- 2-sat是一个逻辑性很强的算法,但是其套路比较固定,所以不是很热,题目很少,但也不乏AC后让人大呼爽快的好题,下面放出两篇极品论文还有几道题目的题解以供交流-- 2-sat学习 ...

最新文章

  1. 使用java代码代替xml实现SSM
  2. oracle standby同步,ORACLE 利用rman增量备份同步standby库
  3. Golang中GOPATH在Goland的理解
  4. memwatch内存泄露检测工具
  5. 创建路径_PS钢笔工具是建立路径的基本工具
  6. 全排列 DFS 回溯
  7. java 获取数据源_J2EE java 获取数据源
  8. 通过复制oracle软件方式安装oracle数据库
  9. 9.6-9.7 awk
  10. 商业 - 业务领先模型介绍(BLM)
  11. 【LOJ101】最大流(Edmonds-Karp)
  12. iPhoneアプリに本格ホラーアドベンチャー監獄脱出少女 android
  13. 基于Selenium的Web UI自动化实现(java)
  14. python与数据挖掘课后实验答案_数据仓库与数据挖掘课后习题答案
  15. 开发者投稿—百度大脑新品体验之肤色检测
  16. 表单验证设计的用户体验基本原则
  17. 视频压缩原理之 预测编码
  18. MySQL技术总结第一篇
  19. WPf控件模板缺省样式
  20. Visual Studio 2017,C++MFC免注册调用大漠插件图文教程,详细版

热门文章

  1. (2)勾股数组与单位圆
  2. blender学习日志
  3. Android 支付宝支付SDK接入
  4. csv是什么意思中文_CSV文件是什么意思?
  5. iphoneX适配-客户端H5页面
  6. 上上上篇ANTV留下来的坑
  7. html如何设置顶部,css中文字如何设置在顶部
  8. 关于AndEngine显示全屏问题
  9. 面试面经 | 2021大疆嵌入式软件工程师笔试题B卷
  10. sv编程语言_sv零星知识点