一、2-SAT 简介:
SAT是适定性(Satisfiability)问题的简称 。一般形式为k-适定性问题,简称 k-SAT。
当k>2时,k-SAT是NP完全的。因此一般讨论的是k=2的情况,即2-SAT问题。
2-SAT就是2判定性问题(条件只有一个,不是这个就是那个),是一种特殊的逻辑判定问题。
2-SAT,简单的说就是给出n个集合,每个集合有两个元素,已知若干个<a,b>,表示a与b矛盾(其中a与b属于不同的集合)。然后从每个集合选择一个元素,一共选n个两两不矛盾的元素。显然可能有多种选择方案,一般题中只需要求出一种即可。
附: 伍昱的《由对称性解2-SAT问题》
赵爽的《2-SAT解法浅析》
二、2-SAT 算法流程:
1.构图 (重点+难点)
2.求图的极大强连通子图 (模板)
3.把每个子图收缩成单个节点,根据原图关系构造一个有向无环图 (模板)
4.判断是否有解,无解则输出(退出) (这块常用到二分枚举答案)
5.对新图进行拓扑排序 (模板)
6.自底向上进行选择、删除 (模板)
7.输出(模板)
三、2-SAT 个人学习思路:
1.看课件了解什么是2-SAT
2.学习如何求极大强连通分量(tarjan、kosaraju)
3.构图,找题目所述的相互矛盾,使不矛盾的那个状态必连,形成有入度出度的有向图
4.2-sat包括判断和求方案
判断是否可行只需判断一个点的两个状态是否在一个环里,在的话就无解
求可行方案,貌似这类的题都会是special judge 因为拓扑序不唯一。 没错,做法就是对 缩点后的新图进行拓扑(用kosaraju的好处是第二次dfs后已经形成拓扑序),然后逆拓扑序进 行选择(删除相对的),逆着是因为这样不会牵及别的,例如入度为0的不止一个等等的,貌似是。
5.2-sat就这么些,然后就是与别的进行组合(嵌套)使用
四、2-SAT 实战应用
SAT是适定性(Satisfiability)问题的简称 。一般形式为k-适定性问题,简称 k-SAT。
当k>2时,k-SAT是NP完全的。因此一般讨论的是k=2的情况,即2-SAT问题。
2-SAT就是2判定性问题(条件只有一个,不是这个就是那个),是一种特殊的逻辑判定问题。
2-SAT,简单的说就是给出n个集合,每个集合有两个元素,已知若干个<a,b>,表示a与b矛盾(其中a与b属于不同的集合)。然后从每个集合选择一个元素,一共选n个两两不矛盾的元素。显然可能有多种选择方案,一般题中只需要求出一种即可。
附: 伍昱的《由对称性解2-SAT问题》
赵爽的《2-SAT解法浅析》
二、2-SAT 算法流程:
1.构图 (重点+难点)
2.求图的极大强连通子图 (模板)
3.把每个子图收缩成单个节点,根据原图关系构造一个有向无环图 (模板)
4.判断是否有解,无解则输出(退出) (这块常用到二分枚举答案)
5.对新图进行拓扑排序 (模板)
6.自底向上进行选择、删除 (模板)
7.输出(模板)
三、2-SAT 个人学习思路:
1.看课件了解什么是2-SAT
2.学习如何求极大强连通分量(tarjan、kosaraju)
3.构图,找题目所述的相互矛盾,使不矛盾的那个状态必连,形成有入度出度的有向图
4.2-sat包括判断和求方案
判断是否可行只需判断一个点的两个状态是否在一个环里,在的话就无解
求可行方案,貌似这类的题都会是special judge 因为拓扑序不唯一。 没错,做法就是对 缩点后的新图进行拓扑(用kosaraju的好处是第二次dfs后已经形成拓扑序),然后逆拓扑序进 行选择(删除相对的),逆着是因为这样不会牵及别的,例如入度为0的不止一个等等的,貌似是。
5.2-sat就这么些,然后就是与别的进行组合(嵌套)使用
四、2-SAT 实战应用