2-SAT问题的小结

简介

  什么是2-SAT呢?就是有一些集合,每个集合中有且仅有两个元素,且不能同时选取两个元素,集合间的元素存在一定的选择关系,求解可行性及可行方案。

算法

1、连边

2、跑tarjan

3、判可行性,即同一集合中的两个点是否同属一个强连通块

4、缩点建新图,连反边

5、拓扑序,若当前点没有被访问过,则选择该点,不选择其另外的点

连边

2-SAT算法本身并不难,关键是连边,不过只需要充分理解好边的概念:a->b即选a必选b。

a、b不能同时选:选了a就要选b',选了b就要选a'。

a、b必须同时选:选了a就要选b,选了b就要选a,选了a'就要选b',选了b'就要选a'。

a、b必须选一个:选了a就要选b',选了b就要选a',选了a'就要选b,选了b'就要选a。

※a必须选:a'->a。

一些题目

POJ 3683 输出方案

POJ 3678 连边练习

BZOJ 1823 判断可行性

某不知名字的题目

题意:一开始有一些点与点的关系,问删除一些点之后,方案是否可行。

分析:删除点之后,原有的关系的连边会有所改变,因此对于每删除一些点,就要重新构图,跑2-SAT

资料

  以上只是为了个人总结所用,所以并不是很详细。

  需要的可前往:http://blog.csdn.net/jarjingx/article/details/8521690

  

 

posted @   Splay  阅读(6183)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示