由对称性解2-SAT问题
(by 伍昱,03年IOI国家集训队论文ppt) 2-SAT:
2-SAT就是2判定性问题,是一种特殊的逻辑判定问题。
2-SAT问题有何特殊性?该如何求解?
我们从一道例题来认识2-SAT问题,并提出对一类2-SAT问题通用的解法。 Poi 0106 Peaceful Commission [和平委员会]
某国有n个党派,每个党派在议会中恰有2个代表。
现在要成立和平委员会 ,该会满足:
每个党派在和平委员会中有且只有一个代表
如果某两个代表不和,则他们不能都属于委员会
代表的编号从1到2n,编号为2a-1、2a的代表属于第a个党派 求和平委员会是否能创立。
若能,求一种构成方式。
输入n(党派数),m(不友好对数)及m对两两不和的代表编号
其中1≤n≤8000,0≤m ≤20000
例:输入:3 2              输出:1
           1 3                    4
           2 4                    5 原题可描述为:
     有n个组,第i个组里有两个节点Ai, Ai' 。需要从每个组中选出一个。而某
些点不可以同时选出(称之为不相容)。任务是保证选出的n个点都能两两相容。
(在这里把Ai, Ai' 的定义稍稍放宽一些,它们同时表示属于同一个组的两个节
点。也就是说,如果我们描述Ai,那么描述这个组的另一个节点就可以用Ai') 初步构图
如果Ai与Aj不相容,那么如果选择了Ai,必须选择Aj' ;同样,如果选择了Aj,
就必须选择Ai' 。
     Ai →   Aj'
     Aj →   Ai'
     这样的两条边对称 我们从一个例子来看:
假设4个组,不和的代表为:1和4,2和3,7和3,那么构图:
   ╭──╮                       
   │     ↓                       
   ①      ③        ④     ╭─⑦   
   ↑     ││             │       
   ╰──╯╰──────┼─╮   
   ╭──╮╭──────╯   │   
   │     ↓↓                 ↓   
   ②      ④        ⑤         ⑧   
   ↑     │                       
   ╰──╯                        假设:
首先选1
3必须选,2不可选
8必须选,4、7不可选
5、6可以任选一个 矛盾的情况为:
存在Ai,使得Ai既必须被选又不可选。 得到算法1:
枚举每一对尚未确定的Ai, Ai' ,任选1个,推导出相关的组,若不矛盾,则可
选择;否则选另1个,同样推导。若矛盾,问题必定无解。 此算法正确性简要说明:
由于Ai,Ai' 都是尚未确定的,它们不与之前的组相关联,前面的选择不会影响Ai, Ai'。
算法的时间复杂度在最坏的情况下为O(nm)。
在这个算法中,并没有很好的利用图中边的对称性 上图中1和3构成一个环,这样1和3要么都被选择,要么都不被选。
2和4同样如此。
更一般的说:
在每个一个环里,任意一个点的选择代表将要选择此环里的每一个点。不妨把环
收缩成一个子节点(规定这样的环是极大强连通子图)。新节点的选择表示选择
这个节点所对应的环中的每一个节点。
对于原图中的每条边Ai→Aj(设Ai属于环Si,Aj属于环Sj)如果Si≠Sj,
则在新图中连边:
     Si→Sj
╭──╮                                       
│     ↓                                       
①      ③     ④ ╭─⑦         (s1)    ④ ╭─⑦
↑     ││       │               │       │     
╰──╯╰───┼─╮    <=>     ╰───┼─╮
╭──╮╭───╯   │           ╭───╯   │
│     ↓↓           ↓           ↓           ↓
②      ④     ⑤      ⑧         (s2)    ⑤      ⑧
↑     │                                       
╰──╯                                       
这样构造出一个新的有向无环图。
此图与原图等价。 通过求强连通分量,可以把图转换成新的有向无环图,在这个基础上,介绍一个
新的算法。 新算法中,如果存在一对Ai, Ai'属于同一个环,则判无解,否则将采用拓扑排序
,以自底向上的顺序进行推导,一定能找到可行解。 至于这个算法的得来及正确性,将在下一段文字中进行详细分析。 深入分析:
回忆构图的过程:
对于两个不相容的点 Ai, Aj,构图方式为:
     Ai→Aj'  
     Aj→Ai'
前面提到过,这样的两条边对称,也就是说:
如果存在Ai→Aj,必定存在Aj'→Ai' 。 引理:原图具有对称传递性
Ai→Aj→Ak 等价于 Ai→Ak
方便起见,之后“→”代表这样一种传递关系 猜测1:图中的环分别对称
如果存在Ai,Aj,Ai,Aj属于同一个环(记作Si),那么Ai' , Aj' 也必定属于一
个环(记作Si' )。
再根据前面的引理,不难推断出每个环分别对称。 推广1:新图中,同样具有对称传递性。 推广2:对于任意一对Si, Si' ,Si的后代节点与Si' 的前代节点相互对称。 继而提出
猜测2:若问题无解,则必然存在Ai, Ai' ,使得Ai, Ai'   属于同一个环。
也就是,如果每一对Ai,Ai' 都不属于同一个环,问题必定有解。下面给出简略证明: 先提出一个跟算法1相似的步骤:
如果选择Si,那么对于所有Si→Sj,Sj都必须被选择。
而Si' 必定不可选,这样Si’的所有前代节点也必定不可选(将这一过程称之为删除)。 由推广2可以得到,这样的删除不会导致矛盾。 假设选择S3'
→选择S3'的后代节点, S1'
→删除S3
→删除S3的前代节点S1
S1与S1'是对称的 另外,若每次盲目的去找一个未被确定的Si,时间复杂度相当高。
以自底向上的顺序进行选择、删除,这样还可以免去“选择Si的后代节点”这一步。
用拓扑排序实现自底向上的顺序。 算法2的流程:
1.构图
2.求图的极大强连通子图
3.把每个子图收缩成单个节点,根据原图关系构造一个有向无环图
4.判断是否有解,无解则输出(退出)
5.对新图进行拓扑排序
6.自底向上进行选择、删除
7.输出 小结:
整个算法的时间复杂度大概是O(m),解决此问题可以说是相当有效了。
在整个算法的构造、证明中反复提到了一个词:对称。发现、利用了这个图的特
殊性质,我们才能够很好的解决问题。
  
并且,由2-SAT问题模型变换出的类似的题目都可以用上述方法解决。 全文总结:
充分挖掘图的性质,能够更好的解决问题。
不仅仅是对于图论,这种思想可以在很多问题中得到很好的应用。
希望我们能掌握此种解题的思想,在熟练基础算法的同时深入分析、灵活运用、
大胆创新,从而解决更多更新的难题。
由对称性解2-SAT问题
(by 伍昱,03年IOI国家集训队论文ppt) 2-SAT:
2-SAT就是2判定性问题,是一种特殊的逻辑判定问题。
2-SAT问题有何特殊性?该如何求解?
我们从一道例题来认识2-SAT问题,并提出对一类2-SAT问题通用的解法。 Poi 0106 Peaceful Commission [和平委员会]
某国有n个党派,每个党派在议会中恰有2个代表。
现在要成立和平委员会 ,该会满足:
每个党派在和平委员会中有且只有一个代表
如果某两个代表不和,则他们不能都属于委员会
代表的编号从1到2n,编号为2a-1、2a的代表属于第a个党派 求和平委员会是否能创立。
若能,求一种构成方式。
输入n(党派数),m(不友好对数)及m对两两不和的代表编号
其中1≤n≤8000,0≤m ≤20000
例:输入:3 2              输出:1
           1 3                    4
           2 4                    5 原题可描述为:
     有n个组,第i个组里有两个节点Ai, Ai' 。需要从每个组中选出一个。而某
些点不可以同时选出(称之为不相容)。任务是保证选出的n个点都能两两相容。
(在这里把Ai, Ai' 的定义稍稍放宽一些,它们同时表示属于同一个组的两个节
点。也就是说,如果我们描述Ai,那么描述这个组的另一个节点就可以用Ai') 初步构图
如果Ai与Aj不相容,那么如果选择了Ai,必须选择Aj' ;同样,如果选择了Aj,
就必须选择Ai' 。
     Ai →   Aj'
     Aj →   Ai'
     这样的两条边对称 我们从一个例子来看:
假设4个组,不和的代表为:1和4,2和3,7和3,那么构图:
   ╭──╮                       
   │     ↓                       
   ①      ③        ④     ╭─⑦   
   ↑     ││             │       
   ╰──╯╰──────┼─╮   
   ╭──╮╭──────╯   │   
   │     ↓↓                 ↓   
   ②      ④        ⑤         ⑧   
   ↑     │                       
   ╰──╯                        假设:
首先选1
3必须选,2不可选
8必须选,4、7不可选
5、6可以任选一个 矛盾的情况为:
存在Ai,使得Ai既必须被选又不可选。 得到算法1:
枚举每一对尚未确定的Ai, Ai' ,任选1个,推导出相关的组,若不矛盾,则可
选择;否则选另1个,同样推导。若矛盾,问题必定无解。 此算法正确性简要说明:
由于Ai,Ai' 都是尚未确定的,它们不与之前的组相关联,前面的选择不会影响Ai, Ai'。
算法的时间复杂度在最坏的情况下为O(nm)。
在这个算法中,并没有很好的利用图中边的对称性 上图中1和3构成一个环,这样1和3要么都被选择,要么都不被选。
2和4同样如此。
更一般的说:
在每个一个环里,任意一个点的选择代表将要选择此环里的每一个点。不妨把环
收缩成一个子节点(规定这样的环是极大强连通子图)。新节点的选择表示选择
这个节点所对应的环中的每一个节点。
对于原图中的每条边Ai→Aj(设Ai属于环Si,Aj属于环Sj)如果Si≠Sj,
则在新图中连边:
     Si→Sj
╭──╮                                       
│     ↓                                       
①      ③     ④ ╭─⑦         (s1)    ④ ╭─⑦
↑     ││       │               │       │     
╰──╯╰───┼─╮    <=>     ╰───┼─╮
╭──╮╭───╯   │           ╭───╯   │
│     ↓↓           ↓           ↓           ↓
②      ④     ⑤      ⑧         (s2)    ⑤      ⑧
↑     │                                       
╰──╯                                       
这样构造出一个新的有向无环图。
此图与原图等价。 通过求强连通分量,可以把图转换成新的有向无环图,在这个基础上,介绍一个
新的算法。 新算法中,如果存在一对Ai, Ai'属于同一个环,则判无解,否则将采用拓扑排序
,以自底向上的顺序进行推导,一定能找到可行解。 至于这个算法的得来及正确性,将在下一段文字中进行详细分析。 深入分析:
回忆构图的过程:
对于两个不相容的点 Ai, Aj,构图方式为:
     Ai→Aj'  
     Aj→Ai'
前面提到过,这样的两条边对称,也就是说:
如果存在Ai→Aj,必定存在Aj'→Ai' 。 引理:原图具有对称传递性
Ai→Aj→Ak 等价于 Ai→Ak
方便起见,之后“→”代表这样一种传递关系 猜测1:图中的环分别对称
如果存在Ai,Aj,Ai,Aj属于同一个环(记作Si),那么Ai' , Aj' 也必定属于一
个环(记作Si' )。
再根据前面的引理,不难推断出每个环分别对称。 推广1:新图中,同样具有对称传递性。 推广2:对于任意一对Si, Si' ,Si的后代节点与Si' 的前代节点相互对称。 继而提出
猜测2:若问题无解,则必然存在Ai, Ai' ,使得Ai, Ai'   属于同一个环。
也就是,如果每一对Ai,Ai' 都不属于同一个环,问题必定有解。下面给出简略证明: 先提出一个跟算法1相似的步骤:
如果选择Si,那么对于所有Si→Sj,Sj都必须被选择。
而Si' 必定不可选,这样Si’的所有前代节点也必定不可选(将这一过程称之为删除)。 由推广2可以得到,这样的删除不会导致矛盾。 假设选择S3'
→选择S3'的后代节点, S1'
→删除S3
→删除S3的前代节点S1
S1与S1'是对称的 另外,若每次盲目的去找一个未被确定的Si,时间复杂度相当高。
以自底向上的顺序进行选择、删除,这样还可以免去“选择Si的后代节点”这一步。
用拓扑排序实现自底向上的顺序。 算法2的流程:
1.构图
2.求图的极大强连通子图
3.把每个子图收缩成单个节点,根据原图关系构造一个有向无环图
4.判断是否有解,无解则输出(退出)
5.对新图进行拓扑排序
6.自底向上进行选择、删除
7.输出 小结:
整个算法的时间复杂度大概是O(m),解决此问题可以说是相当有效了。
在整个算法的构造、证明中反复提到了一个词:对称。发现、利用了这个图的特
殊性质,我们才能够很好的解决问题。
  
并且,由2-SAT问题模型变换出的类似的题目都可以用上述方法解决。 全文总结:
充分挖掘图的性质,能够更好的解决问题。
不仅仅是对于图论,这种思想可以在很多问题中得到很好的应用。
希望我们能掌握此种解题的思想,在熟练基础算法的同时深入分析、灵活运用、
大胆创新,从而解决更多更新的难题。

由对称性解2-SAT问题的更多相关文章

  1. 学习笔记(two sat)

    关于two sat算法 两篇很好的论文由对称性解2-SAT问题(伍昱), 赵爽 2-sat解法浅析(pdf). 一些题目的题解 poj 3207 poj 3678 poj 3683 poj 3648 ...

  2. 2-sat基础详解

    (大量引用<2-SAT解法浅析 -by 华中师大一附中 赵爽><由对称性解2-SAT问题> Great_Influence关于P4782 [模板]2-SAT 问题的题解.在此对 ...

  3. [2-SAT]【学习笔记】【未完】

    这种一看就很2的东西.... 参考资料: 由对称性解2-sat问题 2-sat解法浅析 $SAT$理论: $2-SAT$ 两种形式: $x \in \hat B$ $x \lor y(x,\ y \i ...

  4. 闲谈2-sat问题

    问题简介 在计算机科学中,布尔可满足性问题(有时称为命题可满足性问题,缩写为SATISFIABILITY或SAT)是确定是否存在满足给定布尔公式的解释的问题.换句话说,它询问给定布尔公式的变量是否可以 ...

  5. 关于2-sat的建图方法及解决方案

    转载增减: https://blog.csdn.net/qq_24451605/article/details/47126143 https://blog.csdn.net/u012915516/ar ...

  6. [转] ACM中国国家集训队论文集目录(1999-2009)

    国家集训队1999论文集 陈宏:<数据结构的选择与算法效率——从IOI98试题PICTURE谈起>来煜坤:<把握本质,灵活运用——动态规划的深入探讨>齐鑫:<搜索方法中的 ...

  7. 【POJ】3207 Ikki's Story IV - Panda's Trick

    http://poj.org/problem?id=3207 题意:一个圆上顺时针依次排列着标号为1-n的点,这些点之间共有m条边相连,每两个点只能在圆内或者圆外连边.问是否存在这些边不相交的方案.( ...

  8. NOI 国家集训队论文集

    鉴于大家都在找这些神牛的论文.我就转载了这篇论文合集 国家集训队论文分类 组合数学 计数与统计 2001 - 符文杰:<Pólya原理及其应用> 2003 - 许智磊:<浅谈补集转化 ...

  9. hdu 3062

    2-SAT的入门题: 网上说这个算法最好的入门教材是:伍昱的<由对称性解2-SAT问题>的ppt和赵爽的论文<2-SAT 解法浅析>: 看了一下伍昱的ppt,很好理解! 而这道 ...

随机推荐

  1. ABI与ARM,X86的概念

    Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2 ...

  2. 【Python】PIL模块

    Python自建库,在爬虫等基础应用中更加简单好记,做整理以备自查. 目录 Image模块 open类.Save类.format类.Mode类.convert类.Size类.Info类.new类.Co ...

  3. leecode 238除自身以外数组的乘积

    class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { //用除法必须要 ...

  4. Linux 下 *.tar.gz 文件解压缩命令及错误处理

    1.压缩命令: 命令格式: tar -zcvf 压缩文件名 .tar.gz 被压缩文件名 可先切换到当前目录下,压缩文件名和被压缩文件名都可加入路径. 2.解压缩命令: 命令格式: tar -zxvf ...

  5. LVS 四层 TCP/UDP 负载均衡器

    目录 文章目录 目录 LVS LVS 应用结构 LVS 提供的三种模式 LVS-NAT LVS-TUN LVS_DR LVS 负载均衡算法 静态负载均衡 动态负载均衡 LVS-ipvsadm 指令集 ...

  6. Android 动态申请权限

    AndroidManifest.xml(清单文件)添加需要的权限 <uses-permission android:name="android.permission.ACCESS_CO ...

  7. 四十四:数据库之SQLAlchemy之join实现复杂查询

    准备工作 from datetime import datetime from sqlalchemy import create_engine, Column, Integer, String, Da ...

  8. zabbix服务器性能监控工具的安装二

    上一篇完成了lnmp的安装,本篇则可以继续完成zabbix的安装 目录 1.下载 2.安装 1.下载 下载链接:http://jaist.dl.sourceforge.net/project/zabb ...

  9. ntp同步报错解决

    服务端:192.168.1.204 主机名: www.test.com 客户端:192.168.1.206 主机名: www.test3.com 客户端同步服务端报错如下: [root@www etc ...

  10. js移动端滑动效果

    移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件 ...