hihoCoder #1468 : 2-SAT·hihoCoder新春晚会(2-SAT 输出字典序最小的方案)
描述
hihoCoder新春晚会正在紧张地筹备中。晚会分为上半场和下半场,总导演小Hi现在要为N个节目安排演出时间(上半场或下半场)。为了描述方便,我们将第i个节目对应两个编号2i-1和2i,分别表示把第i个节目安排在上半场和下半场。
由于演员、道具和布景的限制。有些安排之间存在冲突,比如编号1的安排和编号4的安排有冲突,意味着"把第1个节目安排在上半场"同"把第2个节目安排在下半场"有冲突。
现在小Hi手里有M对编号,表示冲突的节目安排。他的任务是帮助主办方安排出节目演出的合理时间。
输入
第一行包含两个非负整数n和m(n≤8000,m≤20000),代表有n个节目和m对冲突。
接下来m行每行两个数x和y,表示编号x和编号y冲突。
输出
输出n行,每行一个数,从小到大输出最后进行演出的编号。若有多解,则输出字典序最小的。无解则输出NIE。
样例输入
3 2
1 3
2 4
样例输出
1
4
5
思路
SAT建边,然后暴力DFS(NMNMNM)
每个点拆成了两个点i1和i2i_1 和i_2i1和i2
先从最小的点i1i_1i1开始枚举将路径上的点标记,如果存在矛盾那么这个点不符合,然后枚举i2i_2i2,如果这个点还存在矛盾,那么无解
建图的时候要对应好关系,对于这个题i1和i2i_1 和i_2i1和i2是互斥的,所以要 (i1→¬i2ori2→¬i1i_1 \to\lnot i_2or i_2\to\lnot i_1i1→¬i2ori2→¬i1) 而不是(¬i1→i2or¬i2→i1\lnot i_1 \to i_2or \lnot i_2\to i_1¬i1→i2or¬i2→i1)
#include <bits/stdc++.h>
#define LL long long
#define P pair<int, int>
#include <time.h>
#define lowbit(x) (x & -x)
#define mem(a, b) memset(a, b, sizeof(a))
#define rep(i, a, n) for (int i = a; i <= n; ++i)
const int maxn = 1044373;
#define mid ((l + r) >> 1)
#define lc rt<<1
#define rc rt<<1|1
using namespace std;int read() {int num = 0, flag = 1;char c = getchar();while (c < '0' || c > '9') flag = (c == '-') ? -1 : 1, c = getchar();while (c >= '0' && c <= '9') num = (num << 3) + (num << 1) + c - '0', c = getchar();return num * flag;
}
void out(int x) {if (x > 9) out(x / 10);putchar(x % 10 + '0');
}vector<int> g[maxn];
int tmp[maxn], vis[maxn], len;int other(int x) {if (x & 1) return x+1;else return x-1;
}int dfs(int x) {if (vis[other(x)]) return 0;if (vis[x]) return 1;tmp[len++] = x;vis[x] = 1;for (int i = 0, y; i < (int)g[x].size(); ++i) {y = g[x][i];if (dfs(y) == 0) return 0;}return 1;
}int main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int n, m;scanf("%d %d", &n, &m);for (int i = 0, l, r; i < m; ++i) {scanf("%d %d", &l, &r);g[l].push_back(other(r));g[r].push_back(other(l));}for (int i = 1; i <= n; ++i) {if (vis[i*2] || vis[i*2-1]) continue;len = 0;if (dfs(i*2-1) == 0) {for (int j = 0; j < len; ++j) {vis[tmp[j]] = 0;}len = 0;if (dfs(i*2) == 0) {puts("NIE");return 0;}}}for (int i = 1; i <= n*2; ++i) if (vis[i]) printf("%d\n", i);return 0;
}
hihoCoder #1468 : 2-SAT·hihoCoder新春晚会(2-SAT 输出字典序最小的方案)相关推荐
- 【方案分享】地产项目2022年新春1月系列暖场活动策划方案:新年置业,如虎添翼.pptx(附下载链接)...
省时查报告-专业.及时.全面的行研报告库 省时查方案-专业.及时.全面的营销策划方案库 大家好,我是文文(微信号:sscbg2020),今天给大家分享一份虎年干货方案<地产项目2022年新春1月 ...
- 天猫双11晚会和狂欢城的互动技术方案
编者按: \\ 4月21日,天猫互动的技术专家邓红春(续彬)在QCon北京2016分享了<天猫双11晚会和狂欢城的互动技术方案>.2015年天猫联合湖南卫视联合打造了一场最互联网的双11晚 ...
- NOIp系列题目及CF小结
长期更新中2333 2018/7/2 先看一下昨晚的cf Codeforces Round #493 (Div. 2) A. Balloons 这个题...直接模拟233 B. Cutting 来一下 ...
- 我的所有优质博客全部开源啦(我自己原创的《ACM模板》《算法全家桶》《算法竞赛中的初等数论》 PDF免费下载)
你好呀ヾ(≧▽≦*)o 我是繁凡さん 这两年来我写了很多长篇文章,主要涉及数据结构,算法,程序设计竞赛,数学,计算几何等方面的内容: <数据结构>C语言版(清华严蔚敏考研版) 全书知识梳理 ...
- PAT (Advanced Level) Practice 题解代码 - II (1051-1100)
PAT PAT (Advanced Level) Practice - II(1051-1100) -------------------------------------------------- ...
- pat甲级 第一章 字符串1-10 自用
1字符串6 1534. 字符串减法 //1534. 字符串减法 // //给定两个字符串 S1 和 S2,S = S1−S2 定义为将 S1 中包含的所有在 S2 中出现过的字符删除后得到的字符串. ...
- ACM模板(满注释模板!)
转自:https://fanfansann.blog.csdn.net/article/details/105493218 目录 F o r e w o r d ForewordForeword T ...
- 【PAT甲级真题整理三】1061~1090
目录 1061 Dating(20)字符串处理 1062 Talent and Virtue(25)排序 1063 Set Similarity(25)set的使用 1064 Complete Bin ...
- hihocoder #1163 : 博弈游戏·Nim游戏
题意:有k堆石子,每次选择一堆,在这堆中取至少一个石子,第一个无石子可取的人为输. 思路:经典游戏,直接有结论:如果这些堆的石子数为:a1,a2,a3-an.那么a1到an的异或为0,则先手有必败策略 ...
最新文章
- 雅马哈机器人左手右手系统_消防管件组装成机器人 PM值临界时会报警并自动喷淋...
- 微信实时Look-alike算法分享赏析
- Android支付宝SDK开发笔记
- java模式之装饰模式
- 2020必火的图神经网络(GNN)是什么?有什么用?
- Java系统架构的演化之路
- eclipse 中的注释 快捷键
- 不要以为写写代码就是计算机科学
- android 模拟menu键点击事件,android处理Back键Home键和Menu键事件(转)
- 移动端应用视频小程序加密播放(存档)
- 一个不重复的随机数发生函数
- 小程序上线后部分图片不显示的问题
- HC-SR501 人体红外感应模块 单片机
- SpringBoot项目在使用Maven打包war中遇到的问题
- poi导出excel无法打开文件
- 【完美解决】修复concrt140.dll未找到错误的问题
- 2021-2022-2-第5次单元练习后记
- Kylin的介绍及使用说明
- 网站移动端APP渗透测试安全检测方案
- 2021年中国光伏行业现状分析,光伏发电集中式与分布式并举的发展趋势明显「图」
热门文章
- [CQOI2018] 解锁屏幕
- python初步学习-查看文档及数据类型转换
- HDU 5919 Sequence II 主席树
- Lichee (六) 优化配置的微内核
- [BZOJ1007](HNOI2008)水平可见直线(半平面交习题)
- sftp 服务器外网访问设置
- SQL Server2012登录记录怎么删除?
- 【数据结构与算法】之深入解析“将有序数组转换为二叉搜索树”的求解思路与算法示例
- iOS之深入解析bitcode的功能与应用
- 2021年第十二届蓝桥杯 - 省赛 - C/C++大学C组 - D.相乘