【2-SAT(最小字典序/暴力染色)】HDU1814-Peaceful Commission
【题目大意】
和平委员会每个党派有2个人,只能派出其中1个,其中有一些人之间互相讨厌不能同时派出。求出派遣方案,如果有多种方案输出字典序最小的方案。
【思路】
最小字典序只能用暴力染色。初始时均没有染色。枚举将党派第一个人染成红色,然后dfs把和它相连的全部染成红色,如果其中有的是蓝色那么矛盾;如果第一种情况矛盾那么dfs第二个人染成红色,如果也矛盾说明无解。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define W 0
#define R 1
#define B 2
using namespace std;
const int MAXN=(+)*;
int n,m;
vector<int> E[MAXN];
int col[MAXN],ans[MAXN],cnt; void addedge(int u,int v)
{
E[u].push_back(v);
} int dfs(int u)
{
col[u]=R;
col[u^]=B;
ans[++cnt]=u;
for (int i=;i<E[u].size();i++)
{
int v=E[u][i];
if (col[v]==R) continue;
if (col[v]==B || !dfs(v)) return ;
}
return ;
} void init()
{
for (int i=;i<m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
u--;v--;
addedge(u,v^);
addedge(v,u^);
}
} int solve()
{
memset(col,,sizeof(col));
for (int i=;i<n*;i++)
if (!col[i])
{
cnt=;
if (!dfs(i))
{
for (int j=;j<=cnt;j++) col[ans[j]]=col[ans[j]^]=W;
if (!dfs(i^)) return ;
}
}
return ;
} int main()
{
//freopen("spo0.in","r",stdin);
//freopen("spo0.out","w",stdout);
while (scanf("%d%d",&n,&m)!=EOF)
{
for (int i=;i<*n;i++) vector<int>().swap(E[i]);//不要忘记清空vector
init();
if(solve())
{
for(int i=;i<*n;i++)
{
if(col[i]==R) printf("%d\n", i+);
}
}
else
{
printf("NIE\n");
}
}
return ;
}
【2-SAT(最小字典序/暴力染色)】HDU1814-Peaceful Commission的更多相关文章
- hdu1814 Peaceful Commission
hdu1814 Peaceful Commission 题意:2-sat裸题,打印字典序最小的 我写了三个 染色做法,正解 scc做法,不管字典序 scc做法,错误的字典序贪心 #include &l ...
- HDU1814(Peaceful Commission) 【2-SAT DFS暴力求最小字典序的模板】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1814 题意:给出一个数n,代表有n个党派,每个党派要求派出其中一个人去参加会议,且只能派出一人.给出m ...
- HDU1814 Peaceful Commission 2-sat
原文链接http://www.cnblogs.com/zhouzhendong/p/8099115.html 题目传送门 - HDU1814 题面 Description 根据宪法,Byteland民 ...
- hdu1814 Peaceful Commission——2-SAT
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1814 第一次的2-SAT,推荐博客:https://blog.csdn.net/jarjingx/arti ...
- HDU-1814 Peaceful Commission 2sat
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1814 简单的2sat题. //STATUS:C++_AC_390MS_996KB #include & ...
- hdu1814 Peaceful Commission,2-sat
题目大意:一国有n个党派.每一个党派在议会中都有2个代表,现要组建和平委员会,要从每一个党派在议会的代表中选出1人,一共n人组成和平委员会.已知有一些代表之间存在仇恨,也就是说他们不能同一时候被选为和 ...
- 【HDU1814】Peaceful Commission(2-sat+暴力染色)
传送门 \(2-sat\)的模板题,首先得出题目中的二元关系为:对于有矛盾的\(x_i,x_j\),至多选择一个,那么连边\(x_i\rightarrow x_j',x_j\rightarrow x_ ...
- 2-sat按照最小字典序输出可行解(hdu1814)
Peaceful Commission Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 2-sat——暴力染色输出方案hdu1814
因为要求输出字典序最小的解,所以用暴力染色 具体有点像二分图染色 遍历0-2*n-1个点,尝试将每个点染成1,该点所能到达的所有点都要染成1 如果不行,则把上该点的影响消除,再把对立点染成1,如果还不 ...
随机推荐
- js刷新页面方法 -- (转)
1,reload 方法,该方法强迫浏览器刷新当前页面. 语法:location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里 ...
- poj 1298 The Hardest Problem Ever
题目链接:http://poj.org/problem?id=1298 题目大意:按照所给的顺序要求将输入的字符串进行排列. #include <iostream> #include &l ...
- Spring Cloud Netflix之Eureka 相关概念
为什么不应该使用ZooKeeper做服务发现 英文链接:Eureka! Why You Shouldn’t Use ZooKeeper for Service Discovery:http://www ...
- Linux汇编教程01: 基本知识
在我们开始学习Linux汇编之前,需要简单的了解一下计算机的体系结构.我们不需要特别深入的了解,理解了一些基本概念对与我们理解程序会很有帮助.现在计算机的结构体系都是采用冯诺依曼体系结构的基础上发展过 ...
- Linux内核死锁检测机制【转】
转自:http://www.oenhan.com/kernel-deadlock-check 死锁就是多个进程(线程)因为等待别的进程已占有的自己所需要的资源而陷入阻塞的一种状态,死锁状态一旦形成,进 ...
- notifier chain — 内核通知链【转】
转自:http://blog.csdn.net/g_salamander/article/details/8081724 大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣 ...
- mysql 服务器配置
Windows: 1.在bin目录下执行mysqld.exe --install-manual安装服务(删除命令是mysqld.exe --remove) 2.执行net start mysql启动服 ...
- linux命令(20):rm命令
1. 强行删除文件,系统不再确认:rm –f test.log 2. 删除任何.log文件:rm *.log 3. 将test子目录及子目录中所有档案删除:rm –r test 4. 将 test子 ...
- sql查询语句查询顺序
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
- [译]怎样用HTML5 Canvas制作一个简单的游戏
这是我翻译自LostDecadeGames主页的一篇文章,原文地址:How To Make A Simple HTML5 Canvas Game. 下面是正文: 自从我制作了一些HTML5游戏(例如C ...