http://acm.hdu.edu.cn/showproblem.php?pid=1814

题意:n个2人组,编号分别为2n和2n+1,每个组选一个人出来,且给出m条关系(x,y)使得选了x就不能选y,问是否能从每个组选出1人。且输出字典序最小的答案。(n<=8000, m<=20000)

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <iostream>
using namespace std;
const int N=8005, M=20005;
struct E { int next, to; }e[M<<1];
int cnt, ihead[N<<1], top, s[N<<1], n, m;
bool vis[N<<1];
void add(int u, int v) { e[++cnt]=(E){ihead[u], v}; ihead[u]=cnt; }
bool dfs(int x) {
if(vis[x^1]) return 0;
if(vis[x]) return 1;
vis[x]=1;
s[++top]=x;
for(int i=ihead[x]; i; i=e[i].next) if(!dfs(e[i].to)) return 0;
return 1;
}
bool work() {
int nn=n<<1;
for(int i=0; i<nn; i+=2) if(!vis[i] && !vis[i+1]) {
top=0;
if(!dfs(i)) {
while(top) vis[s[top--]]=0;
if(!dfs(i+1)) return 0;
}
}
for(int i=0; i<nn; ++i) if(vis[i]) printf("%d\n", i+1);
return 1;
}
int main() {
while(~scanf("%d%d", &n, &m)) {
for(int i=0; i<m; ++i) { int x, y; scanf("%d%d", &x, &y); --x; --y; add(x, y^1); add(y, x^1); }
if(!work()) puts("NIE");
cnt=top=0;
memset(vis, 0, sizeof(bool)*(n<<1));
memset(ihead, 0, sizeof(int)*(n<<1));
}
return 0;
}

  

本题很显然的2-sat问题= =

对于关系(x,y)实际上就是满足!(x & y)

即当x=1时y必须为0,即连边x->y'

当y=1时x必须为1,即连边y->x'

由于这个dfs的算法本身就是字典序最小了= =直接搞就行了= =

(妈呀难道这个算法是O(nm)的嘛QAQ看来得写tarjan了以后= =(虽然字典序最小只能用这个O(nm)算法= =?)

【HDU】1814 Peaceful Commission的更多相关文章

  1. 【HDOJ】1814 Peaceful Commission

    2-SAT基础题目. /* 1814 */ #include <iostream> #include <vector> #include <algorithm> # ...

  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】4888 Redraw Beautiful Drawings 网络流【推断解是否唯一】

    传送门:pid=4888">[HDU]4888 Redraw Beautiful Drawings 题目分析: 比赛的时候看出是个网络流,可是没有敲出来.各种反面样例推倒自己(究其原因 ...

  4. hdu 1814 Peaceful Commission (2-sat 输出字典序最小的路径)

    Peaceful Commission Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  5. 【HDU】2191 多重背包问题

    原题目:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 [算法]多重背包(有限背包) 动态规划 [题解]http://blog.csdn.net/acdreamers/article/detail ...

  6. HDOJ 1814 Peaceful Commission

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

  7. 【HDU】6110 路径交(2017百度之星) 线段树+RMQ-LCA+树链的交

    [题目]2017"百度之星"程序设计大赛 - 初赛(A) [题意]给定n个点的带边权树,m条编号1~m的路径,Q次询问编号区间[L,R]所有链的交集的长度.n<=500000 ...

  8. 【HDU】6148 Valley Numer 数位DP

    [算法]数位DP [题意]定义V-number为从左到看单位数字未出现先递增后递减现象的数字,求0~N中满足条件的数字个数.T<=200,lenth(n)<=100 [题解]百度之星201 ...

  9. 【HDU】5269 ZYB loves Xor I

    [算法]trie [题解] 为了让数据有序,求lowbit无法直接排序,从而考虑倒过来排序,然后数据就会呈现出明显的规律: 法一:将数字倒着贴在字典树上,则容易发现两数的lowbit就是它们岔道结点的 ...

随机推荐

  1. win7Java开发环境配置

    win7下Java开发环境的配置 首先下载符合操作系统版本的jdk,比如最新的jdk8: 下载链接:http://www.oracle.com/technetwork/java/javase/down ...

  2. HTTP/1.1 中 If-Modified-Since 和 If-Unmodified-Since 区别简记

    接触HTTP/1.1的时日还不多, 有时候看着这两个参数老是有点混淆, 今天终于理清了, 现记录下.    初学网络, 若有理解不对, 还请拍砖. If-Modified-Since: 从字面上看, ...

  3. 针对较大基数的排列组合算法Java实现类(n选m)

    package com.utils; import java.math.BigDecimal; import java.math.RoundingMode; public class PLZUUtil ...

  4. iphone手机不同版本兼容、横竖屏

    /* 兼容问题*/ @media screen and (device-width: 320px) and (device-height: 480px) and (-webkit-device-pix ...

  5. EF中无法使用时间转字符串

    场景: 查询条件需要使用到时间类型,且需要特殊格式化,例:ToString("yyyy-MM-dd"):即,在需要使用时间进行like方式处理时: 此时,用如下方式: var q ...

  6. 开始我的PostgreSQL的学习之旅

    经过这么长时间的学习,终于确定了我的研究方向是PostgreSQL的空间数据库的设计流程,具体怎样实现这个过程,其难度是挺大的,我必须克服掉,尽量得往前看.大家有相同的研究方向的,可以一同来学习,相互 ...

  7. (转载)一个用于Gnome桌面的下拉式终端: Guake 0.7.0 发布

    转自:https://linux.cn/article-5507-1.html Linux的命令行是最好.最强大的东西,它使新手着迷,并为老手和极客的提供极其强大的功能.那些在服务器和生产环境下工作的 ...

  8. POJ 3294 后缀数组

    题目链接:http://poj.org/problem?id=3294 题意:给定n个字符串,求一个最长子串要求在超过一半的字符串中出现过. 如果多解按字典序输出 思路:根据<<后缀数组— ...

  9. SU suxcontour命令学习

  10. BZOJ 2049 [Sdoi2008]Cave 洞穴勘测 ——Link-Cut Tree

    [题目分析] LCT另一道题目,很裸,许多操作都不需要,写起来很爽. [代码] #include <cstdio> #include <cstring> #include &l ...