TWO-SAT略解:

Part 1 (引入):

其实2-SAT是用来解决一系列类似如果我怎么怎么样,他就怎么怎么怎么样的东西,具体来说就是只有两种状态,两种状态不能兼得。

举个例子:

\(A\) 说如果 \(B\) 去参加群架,那我也得去。

\(B\) 说如果有群架,那我跟 \(C\) 去一个就可以了。

\(C\) 说如果有群架,那我肯定去。

发现这道题其实咱小学就会做了只要画个表格,填个表格就行了。

那考虑怎么让计算机快速的求出这个东西。

Part 2 (口糊):

还是以上面那个例子。

对于 \(A\) 说的话,咱可以这样连边: \(B->A\)

对于 \(B\) 说的话,咱这么连 \(B'->C,C'->B\)

对于 \(C\) 说的话,咱这么连 \(C'->C\)

(所有的'表示这个点不选)

然后考虑怎么做这个玩意儿。

我们可以对它跑一边tarjan求出所有强连通分量,然后按照拓扑序判断每个点选还是不选。

为什么是拓扑序呢?

考虑\(x->x'\),那么肯定如果 \(x\) 选了 \(x'\) 也得选,但是按照咱的说法,这条边的意思是:\(x\) 这个点一定不选。那就矛盾了,只能选拓扑序大的

这里说一下关于tarjan的小技巧,tarjan出来给出的就是反拓扑序,所以其实我们要找的是强连通分量编号小的。

Part 3 (代码):

inline bool two_sat(){for(int i=1;i<=n;++i)if(scc[i]==scc[i+n]) return false;return true;
}

尴尬,好短啊。。。

Part 4 (例题):

JSOI原题:

发现这题其实是个垃圾题,每种材料只有两种做法,跑一遍裸的2-SAT

模板题:

这题可一用来练输出方案。

CF875C:

这题是真的好题,乍一眼看不会,其实是2-SAT,可以参考这篇博文:

CR我都帮你安利了还不帮我推销推销

大概就这样了,最后一题博主的题解:(还没写,到时候补上。。。)

转载于:https://www.cnblogs.com/JCNL666/p/10765514.html

【笔记】2-SAT (tarjan)相关推荐

  1. linux时间为什么没有北京,linux修改时区为中国时区(北京)

    [linux]linux下运行java程序 参考了http://www.cnblogs.com/howard-queen/archive/2012/01/30/2331795.html 第一步:用vi ...

  2. 2021-05-22 《好好说话2》 节选感悟

    写在前面: 本来觉得这样一个一个小技巧教怎么做的书, 多少有点缺乏系统性和中心思想. 但是这本书把作者想要表达的为人处世, 与人相处的核心精神和态度在讲解技巧时, 潜移默化地灌输给读者. 让我对本书地 ...

  3. tarjan算法_【朝夕的ACM笔记】树上问题-最近公共祖先-倍增算法

    [朝夕的ACM笔记]目录与索引 最近公共祖先-倍增算法 一.基本概念 最近公共祖先问题:对于给定的一颗有根树,求其两个节点的最近公共祖先. 祖先:节点本身.节点的父亲.节点父亲的父亲--都是该节点的祖 ...

  4. Tarjan算法学习笔记

    一种由Robert Tarjan提出的求解有向图强连通分量的线性时间的算法. [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected ...

  5. 【算法学习笔记】6:SAT问题的一些经典求解策略

    1 问题描述 布尔可满足性问题是给定一个合取范式(CNF),即一系列析取形式的子句(clause)的合取式,问是否存在一组赋值使得整个式子为真.给出满足条件的赋值(说明是satisfied的),或者证 ...

  6. tarjan算法笔记

    tarjan算法可以用来求强连通块的块数,判断条件是low[x] = dfn[x]: 注意点:缩点后是将强连通块当作点,所以重建图的时候,发现原图2点不在同一强连通块就可以按照原图的方向链接2个超级点 ...

  7. 《SAT:State-Aware Tracker for Real-Time Video Object Segmentation》论文笔记

    参考代码:video_analyst 1. 概述 导读:文章针对半监督(给定首帧标注数据)的VOS(video objet segmentation)任务提出了一种新的处理pipline(segmen ...

  8. MAS 714 笔记20:规约和SAT

    1 规约(reduction) 一个从问题X到问题Y的规约:如果我们有一个问题Y的算法,我们可以用这个问题Y的算法来找到求解问题X的算法. 我们可以使用规约来: 1)找到解决问题的算法 2)说明有一些 ...

  9. 图论专题-学习笔记:强连通分量

    图论专题-学习笔记:强连通分量 一些 update 1. 前言 2. 定义 3. 求法 4. 应用 5. 总结 一些 update update on 2021/8/12:增加了对于 Kosaraju ...

最新文章

  1. 【深度学习】正则化技术全面了解
  2. (Alex note) Create a oracle database
  3. 跟锦数学2017年04月
  4. python pexpect telnet_使用python的pexpect模块,实现远程免密登录的示例
  5. Monte Carlo仿真方法的基本思想及其特点
  6. python 东八区
  7. Firefox 下载、附加组件、Flash插件、缓存位置(附加Chrome下载和Opera下载)
  8. 使用lt;jsp:includegt;,不想写死URL,动态生成URL的解决的方法
  9. matlab IGBT设置占空比,IGBT的驱动参数说明和计算公式
  10. 今日恐慌与贪婪指数为95 贪婪程度有所上升
  11. Spring Cloud总结
  12. [转载]Qt之自定义界面(二)添加最小化、关闭按钮、添加背景
  13. python写采集程序_Python爬虫小说采集程序
  14. 分享一些经典的特效效果,希望对大家有帮助
  15. 哪个不是计算机使用的汉子编码,下列不是计算机上使用的汉字编码的是( )。 A.字型码 B.外码 C.内码 D.条形码...
  16. R如何读取txt文件
  17. -bash: netstat: 未找到命令
  18. 海康java版本SDK中jna.jar的说明
  19. 通过IP查找ip所对应网卡名
  20. linux32 浏览器,谷歌停止支持32位linux系统的Chrome浏览器

热门文章

  1. android 进度条图标方形_Android - 条纹进度条实现,调整view宽度仿进度条
  2. mongodb 的命令操作(转)
  3. Fragment:关于Avoid non-default constructors in fragments的错误
  4. 使用jenkins进行Android的持续集成
  5. leetcode LRUCache题目
  6. 数据科学可视化之要途
  7. Java的HashCode,Equal和==
  8. Django 如何展示Media底下的图片
  9. SpringBoot之获取配置文件中的数据
  10. Linux curl命令