2-SAT问题的方案输出
2-sat 推荐学习资料:
伍昱的2003年IOI国家集训队论文《由对称性解2-sat问题》
论文链接:https://wenku.baidu.com/view/31fd7200bed5b9f3f90f1ce2.html
注:
本博文只分析如何输出一组可行解,请读者确保已学习了判断是否有解
本人水平不高,若有分析不得当之处,欢迎指出
法一、tarjan+构建反图+拓扑排序
在原图tarjan缩点后得到的有向无环图的反图上拓扑排序
边拓扑边干两件事儿:
1、选择当前栈顶所代表的问题
2、删除与栈顶问题相对立的问题,删除它在反图上的后继问题
个人理解:
1、一般情况下,2-SAT的构图是对称的,(原因去看论文)
设i与i'为一对相互对立的问题
若在原图中存在下面的左边的连通子图则必存在右边的连通子图

非一般情况比如NOI2017 Day2 T1 游戏,
输入数据会使存在边i-->i',但不一定存在边i'-->i
即给出的约束条件使原本就设定的对立问题 再连边
2、在原图中一条边u-->v代表着如果选择问题u则必须选择问题v
而选择了问题v不一定要选择问题u
在实现的时候,如果在反图上进行拓扑排序,
反图中入度为0的点,对应着原图中出度为0的点,它在原图中没有后继问题
相当于省去了在原图中拓扑排序的还要选择它所有的后继问题
3、在原图中一条边u-->v代表着 如果不选v,则一定不选u
栈顶问题的对立问题一定不能选,所以原图中还要删除对立问题的所有前驱问题
对应到反图中就是后继问题
在具体实现的时候,我们可以使这些栈顶对立问题的后继问题永远不能入栈
不删除栈顶对立问题的出边即可
法二:tarjan
tarjan缩点时会给点重新编号
对于一对相互对立的问题,谁的新编号小就选谁
此方法对于非对称图也适用
反图上在拓扑排序中选择,等价于
原图(缩点后的树)上 从叶子节点开始,自底部向上选择的过程
而tarjan缩点重标号也是从叶子节点往上
2-SAT问题的方案输出的更多相关文章
- Ring HDU - 2296 AC自动机+简单DP和恶心的方案输出
题意: 就是现在给出m个串,每个串都有一个权值,现在你要找到一个长度不超过n的字符串, 其中之前的m个串每出现一次就算一次那个字符串的权值, 求能找到的最大权值的字符串,如果存在多个解,输出最短的字典 ...
- CF-1354 E. Graph Coloring(二分图,背包,背包方案输出)
E. Graph Coloring 链接 n个点m条边的无向图,不保证联通,给每个点标号1,2,3.1号点个数n1,2号点个数n2,3号点个数n3.且每条边的两点,标号之差绝对值为1.如果有合法方案, ...
- poj 2125 Destroying The Graph 最小割+方案输出
构图思路: 1.将所有顶点v拆成两个点, v1,v2 2.源点S与v1连边,容量为 W- 3.v2与汇点连边,容量为 W+ 4.对图中原边( a, b ), 连边 (a1,b2),容量为正无穷大 则该 ...
- luogu P2066 机器分配[背包dp+方案输出]
题目背景 无 题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15 ...
- POJ 3683 Priest John's Busiest Day(2-SAT+方案输出)
Priest John's Busiest Day Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10010 Accep ...
- poj 1015 Jury Compromise(背包+方案输出)
\(Jury Compromise\) \(solution:\) 这道题很有意思,它的状态设得很...奇怪.但是它的数据范围实在是太暴露了.虽然当时还是想了好久好久,出题人设了几个限制(首先要两个的 ...
- Vijos 1071 && caioj 1411 动态规划2:打牌 (背包方案输出)
非常奇怪的是,我在Vijos 1071能AC,在caioj 就只有50分 可以和前面一道题一样算方案,如果大于1就是多解 然后就输出方案就好了 #include<cstdio> #incl ...
- 单片机一种简便的printf调试方案。
此处引用csdn博客.链接如下. http://blog.csdn.net/cp1300/article/details/7773239 http://blog.csdn.net/aobai219/a ...
- 【洛谷】NOIP提高组模拟赛Day1【组合数学】【贪心+背包】【网络流判断是否满流以及流量方案】
U41568 Agent1 题目背景 2018年11月17日,中国香港将会迎来一场XM大战,是世界各地的ENLIGHTENED与RESISTANCE开战的地点,某地 的ENLIGHTENED总部也想派 ...
随机推荐
- More Effective C++ Item14:明智运用exception specifications
使用exception specifications你必须非常仔细去确保,函数调用的子函数.注册的回调函数不会违背约定.而设计模板内部的异常更难确保. 设计回调机制的时候,如果调用方规定了不抛出异常, ...
- Java容器类List、ArrayList、Vector及map、HashTable、HashMap的区别与用法
Java容器类List.ArrayList.Vector及map.HashTable.HashMap的区别与用法 ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数 ...
- 第五篇——Spring音乐播放界面设计(C#)
由于小组成员已经完成软件的详细设计说明书,在这里只具体说明软件程序的细节编写,以免重复. 歌曲的播放采用VS自带的axWindowsMediaPlayer插件,所以程序中涉及到许多该插件的使用.Ctl ...
- Beta版本冲刺(三)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- 关于java中指针的概念
今天寡人遇到一个问题,扫描非关系数据库中的图(由node和rel组成),将其转化成由寡人自定义的gnode和gedge组成的图. gnode类包含结点的id,label和包含此gnode的gedge的 ...
- 读C#程序最小公倍数答案就是:2123581660200
阅读下面程序,请回答如下问题: 问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间 ...
- Alpha冲刺——day5
Alpha冲刺--day5 作业链接 Alpha冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602634 ...
- java词频统计——改进后的单元测试
测试项目 博客文章地址:[http://www.cnblogs.com/jx8zjs/p/5862269.html] 工程地址:https://coding.net/u/jx8zjs/p/wordCo ...
- php artisan 命令列表
php artisan 命令列表 命令获取 上面的翻译内容 命令 说明 备注 php artisan make:resource ? 创建api返回格式化资源 >=5.4版本可用 php ar ...
- Windows下多线程编程(二)
线程的分类 1. 有消息循环线程 MFC中有用户界面线程,从CWinThread派生出一个新的类作为UI线程类CUIThread,然后调用AfxBeginthread(RUNTIME_CLAS ...