hdu 1814 字典序最小的2sat(暴力深搜)
题意:
题意就是最基础的2sat,关系只有矛盾关系,然后二选一,关键是这个题目是输出字典序最小的那组解。
思路:
输出字典序最小,用强连通那个实现不了(起码没看到有人实现),其实我们可以直接暴力,我们可以给某个点染色,分成无色(W)红色(R)和蓝色(B)红色是我们要的答案,对于每一个点我们先尽可能的吧他的a染成红色,把他的~a染成蓝色,如果发现矛盾,就是出现a是蓝色的了,那么我们就把当前这个连通块重新清成W吧其实点换成~a这样在继续染色,如果还是不行,那么就证明无解。否则这样全部染完色之后的红色点就是我们要的点。时间复杂度是 n * m * 2,大约也就n * m左右。本以为会超时,感觉到亿了,结果没有,1140ms AC ,貌似是有直接求什么字典序最小的固定算法吧!反正有也不会。哎!
#include<stdio.h> #include<string.h> #include<queue>#define N_node 16000 + 100 #define N_edge 40000 + 400 #define W 0 #define R 1 #define B 2 using namespace std;typedef struct {int to ,next; }STAR;STAR E[N_edge]; int list[N_node] ,tot; int col[N_node]; queue<int>q;void add(int a ,int b) {E[++tot].to = b;E[tot].next = list[a];list[a] = tot; }bool DFS(int s) {if(col[s] == B) return 0;if(col[s] == R) return 1;col[s] = R ,col[s^1] = B;q.push(s);for(int k = list[s] ;k ;k = E[k].next)if(!DFS(E[k].to)) return 0;return 1; }bool solve(int n) {memset(col ,W ,sizeof(col));for(int i = 0 ;i < n ;i ++){if(col[i]) continue;while(!q.empty()) q.pop();if(!DFS(i)){while(!q.empty()){col[q.front()] = col[q.front()^1] = W;q.pop();}if(!DFS(i^1)) return 0;}}return 1; }int main () {int n ,m ,i ,a ,b;while(~scanf("%d %d" ,&n ,&m)){memset(list ,0 ,sizeof(list)) ,tot = 1;for(i = 1 ;i <= m ;i ++){scanf("%d %d" ,&a ,&b);a-- ,b--;add(a ,b^1) ,add(b ,a^1);}if(solve(n * 2)){for(i = 1 ;i <= n * 2 ;i ++)if(col[i-1] == R) printf("%d\n" ,i);}else printf("NIE\n");}return 0; }
hdu 1814 字典序最小的2sat(暴力深搜)相关推荐
- HDU 1427 速算24点 (深搜)
题目链接 Problem Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用' ...
- hdu 1312深搜入门题
2019独角兽企业重金招聘Python工程师标准>>> Red and Black Problem Description There is a rectangular room, ...
- 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 ...
- hihoCoder #1468 : 2-SAT·hihoCoder新春晚会(2-SAT 输出字典序最小的方案)
描述 hihoCoder新春晚会正在紧张地筹备中.晚会分为上半场和下半场,总导演小Hi现在要为N个节目安排演出时间(上半场或下半场).为了描述方便,我们将第i个节目对应两个编号2i-1和2i,分别表示 ...
- HDU 6301.Distinct Values-贪心、构造字典序最小的数列 (2018 Multi-University Training Contest 1 1004)...
HDU6301.Distinct Values 这个题就是给你区间要求区间内的数都不相同,然后要求是字典序最小,直接贪心走一遍,但是自己写的时候,思路没有错,初始化写挫了... 将区间按左端点小的排序 ...
- HDU 1814 Peaceful Commission
2-SAT,输出字典序最小的解,白书模板. //TwoSAT输出字典序最小的解的模板 //注意:0,1是一组,1,2是一组..... #include<cstdio> #include&l ...
- 背包问题 输出方案、输出字典序最小方案、可行方案数、最优方案总数
原文地址:https://blog.csdn.net/ronaldo7_zyb/article/details/81069906 1. 要求输出方案: 以01背包为例 我们可以知到,01背包用一维数组 ...
- UVA116 单向TSP Unidirectional TSP(多阶段决策问题、输出字典序最小的方案、DAG上DP)
整理的算法模板合集: ACM模板 题目传送门 简单的多阶段决策问题. 多段图DAG,其节点可以划分为若干个阶段,每一个阶段只由上一个阶段所决定. 因为本题要求输出从前到后的方案,所以我们转移方程的时候 ...
- UVA10537 The Toll! Revisited (思维、最短路、输出字典序最小路径)
整理的算法模板合集: ACM模板 题目链接 我们要注意去的时候交的n/20单位的货物,但是倒着回去求答案的时候我们要加上ceil(n/19.0)(自己手算) 字典序中大写字母比小写字母更小 注意看数据 ...
最新文章
- MaxScale:实现MySQL读写分离与负载均衡的中间件利器
- Android FeceDetector(人脸识别)
- Spark源码的编译过程详细解读(各版本)(博主推荐)
- sql server无效的对象名称 - 但表列在SSMS表列表中
- bind函数怎么用JAVA_c++bind函数的用法
- latex使用subequations后,段后首行文字不对齐
- MyBatis查询结果resultType返回值类型详细介绍
- TypeScript 里 object 和 Object 的区别
- 网博士自助建站系统_自助建站:自助建站到底好还是不好?
- java解析java源码_JAVA语言-Java源码解析-Stack源码分析
- linux uuid/uuid.h
- 一串字字符中多个逗号转换为一个,既标准分隔符(正则表达式)
- 腾讯 2016 春季实习校招一面回忆(C++ 后台)
- Windows下Redis的使用
- java常用api-字符串
- python变量后面加星号_易忘易忽略的Python入门知识点-续(一)
- 通过Properties读取配置文件
- 中国车机行业竞争态势与未来发展策略分析报告2022-2028年
- 光猫需要已经开通了 telnet 功能
- 算法高级(45)-阿尔法狗到底有多厉害?