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问题的方案输出的更多相关文章

  1. Ring HDU - 2296 AC自动机+简单DP和恶心的方案输出

    题意: 就是现在给出m个串,每个串都有一个权值,现在你要找到一个长度不超过n的字符串, 其中之前的m个串每出现一次就算一次那个字符串的权值, 求能找到的最大权值的字符串,如果存在多个解,输出最短的字典 ...

  2. CF-1354 E. Graph Coloring(二分图,背包,背包方案输出)

    E. Graph Coloring 链接 n个点m条边的无向图,不保证联通,给每个点标号1,2,3.1号点个数n1,2号点个数n2,3号点个数n3.且每条边的两点,标号之差绝对值为1.如果有合法方案, ...

  3. poj 2125 Destroying The Graph 最小割+方案输出

    构图思路: 1.将所有顶点v拆成两个点, v1,v2 2.源点S与v1连边,容量为 W- 3.v2与汇点连边,容量为 W+ 4.对图中原边( a, b ), 连边 (a1,b2),容量为正无穷大 则该 ...

  4. luogu P2066 机器分配[背包dp+方案输出]

    题目背景 无 题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15 ...

  5. POJ 3683 Priest John's Busiest Day(2-SAT+方案输出)

    Priest John's Busiest Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10010   Accep ...

  6. poj 1015 Jury Compromise(背包+方案输出)

    \(Jury Compromise\) \(solution:\) 这道题很有意思,它的状态设得很...奇怪.但是它的数据范围实在是太暴露了.虽然当时还是想了好久好久,出题人设了几个限制(首先要两个的 ...

  7. Vijos 1071 && caioj 1411 动态规划2:打牌 (背包方案输出)

    非常奇怪的是,我在Vijos 1071能AC,在caioj 就只有50分 可以和前面一道题一样算方案,如果大于1就是多解 然后就输出方案就好了 #include<cstdio> #incl ...

  8. 单片机一种简便的printf调试方案。

    此处引用csdn博客.链接如下. http://blog.csdn.net/cp1300/article/details/7773239 http://blog.csdn.net/aobai219/a ...

  9. 【洛谷】NOIP提高组模拟赛Day1【组合数学】【贪心+背包】【网络流判断是否满流以及流量方案】

    U41568 Agent1 题目背景 2018年11月17日,中国香港将会迎来一场XM大战,是世界各地的ENLIGHTENED与RESISTANCE开战的地点,某地 的ENLIGHTENED总部也想派 ...

随机推荐

  1. Docker GitHub 网站中 Readme.md 以技术者的角度翻译

    Docker 是一个开源的轻量级容器项目,用于让你的应用在它上面打包.集装和运行.Docker 运行的环境既包含未知硬件也包含未知操作系统.这句话的意思是它可以运行在任何地方,小到你的笔记本大到一个大 ...

  2. Flutter - 创建侧滑菜单(不使用navigatior,仅改变content)

    之前写过一篇文章,Flutter - 创建横跨所有页面的侧滑菜单.这个里面中使用了Navigator.of(context).push来导航到新的页面. 这次介绍一种不使用导航,仅仅改变content ...

  3. 设计模式 笔记 桥接模式 Bridge

    //---------------------------15/04/15---------------------------- //Bridge 桥接模式----对象结构型模式 /* 1:意图:将 ...

  4. 浅谈iOS 自动调节文本高度

    文字展示是任何GUI开发的一个最常规的编程任务.可能一提及文字我们脑中想到的无非就是 Label 和 Text 这两个关键词,今天我们就谈谈 Label. 无论在 Windows 或者 Web 开发中 ...

  5. c语言数字图像处理(三):仿射变换

    仿射变换及坐标变换公式 几何变换改进图像中像素间的空间关系.这些变换通常称为橡皮模变换,因为它们可看成是在一块橡皮模上印刷一幅图像,然后根据预定的一组规则拉伸该薄膜.在数字图像处理中,几何变换由两个基 ...

  6. Unity 3D 简易制作摄像机围绕物体随鼠标旋转效果

    Unity 3D 简易制作摄像机围绕物体随鼠标旋转效果 梗概: 一. 摄像机围绕目标物体旋转, 即摄像机离目标物体有一定的距离且旋转轴心为该物体的位置. 二. 当目标物体被障碍物挡住后, 需要将摄像机 ...

  7. LevelDB原理解析

    LevelDb有如下一些特点: 首先,LevelDb是一个持久化存储的KV系统,和Redis这种内存型的KV系统不同,LevelDb不会像Redis一样狂吃内存,而是将大部分数据存储到磁盘上. 其次, ...

  8. 笛卡尔遗传规划Cartesian Genetic Programming (CGP)简单理解(1)

    初识遗传算法Genetic Algorithm(GA) 遗传算法是计算数学中用于解决最优化的搜索算法,是进化算法的一种.进化算法借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传.突变.自然选 ...

  9. 机器学习1—简介及Python机器学习环境搭建

    简介 前置声明:本专栏的所有文章皆为本人学习时所做笔记而整理成篇,转载需授权且需注明文章来源,禁止商业用途,仅供学习交流.(欢迎大家提供宝贵的意见,共同进步) 正文: 机器学习,顾名思义,就是研究计算 ...

  10. 四种遍历hashMap的方法及比较

    学习怎样遍历Java hashMap及不同方法的性能. // hashMap的遍历 public void testHashMap() { Map<String, String> map ...