【笔记】2-SAT (tarjan)
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)相关推荐
- linux时间为什么没有北京,linux修改时区为中国时区(北京)
[linux]linux下运行java程序 参考了http://www.cnblogs.com/howard-queen/archive/2012/01/30/2331795.html 第一步:用vi ...
- 2021-05-22 《好好说话2》 节选感悟
写在前面: 本来觉得这样一个一个小技巧教怎么做的书, 多少有点缺乏系统性和中心思想. 但是这本书把作者想要表达的为人处世, 与人相处的核心精神和态度在讲解技巧时, 潜移默化地灌输给读者. 让我对本书地 ...
- tarjan算法_【朝夕的ACM笔记】树上问题-最近公共祖先-倍增算法
[朝夕的ACM笔记]目录与索引 最近公共祖先-倍增算法 一.基本概念 最近公共祖先问题:对于给定的一颗有根树,求其两个节点的最近公共祖先. 祖先:节点本身.节点的父亲.节点父亲的父亲--都是该节点的祖 ...
- Tarjan算法学习笔记
一种由Robert Tarjan提出的求解有向图强连通分量的线性时间的算法. [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected ...
- 【算法学习笔记】6:SAT问题的一些经典求解策略
1 问题描述 布尔可满足性问题是给定一个合取范式(CNF),即一系列析取形式的子句(clause)的合取式,问是否存在一组赋值使得整个式子为真.给出满足条件的赋值(说明是satisfied的),或者证 ...
- tarjan算法笔记
tarjan算法可以用来求强连通块的块数,判断条件是low[x] = dfn[x]: 注意点:缩点后是将强连通块当作点,所以重建图的时候,发现原图2点不在同一强连通块就可以按照原图的方向链接2个超级点 ...
- 《SAT:State-Aware Tracker for Real-Time Video Object Segmentation》论文笔记
参考代码:video_analyst 1. 概述 导读:文章针对半监督(给定首帧标注数据)的VOS(video objet segmentation)任务提出了一种新的处理pipline(segmen ...
- MAS 714 笔记20:规约和SAT
1 规约(reduction) 一个从问题X到问题Y的规约:如果我们有一个问题Y的算法,我们可以用这个问题Y的算法来找到求解问题X的算法. 我们可以使用规约来: 1)找到解决问题的算法 2)说明有一些 ...
- 图论专题-学习笔记:强连通分量
图论专题-学习笔记:强连通分量 一些 update 1. 前言 2. 定义 3. 求法 4. 应用 5. 总结 一些 update update on 2021/8/12:增加了对于 Kosaraju ...
最新文章
- 【深度学习】正则化技术全面了解
- (Alex note) Create a oracle database
- 跟锦数学2017年04月
- python pexpect telnet_使用python的pexpect模块,实现远程免密登录的示例
- Monte Carlo仿真方法的基本思想及其特点
- python 东八区
- Firefox 下载、附加组件、Flash插件、缓存位置(附加Chrome下载和Opera下载)
- 使用lt;jsp:includegt;,不想写死URL,动态生成URL的解决的方法
- matlab IGBT设置占空比,IGBT的驱动参数说明和计算公式
- 今日恐慌与贪婪指数为95 贪婪程度有所上升
- Spring Cloud总结
- [转载]Qt之自定义界面(二)添加最小化、关闭按钮、添加背景
- python写采集程序_Python爬虫小说采集程序
- 分享一些经典的特效效果,希望对大家有帮助
- 哪个不是计算机使用的汉子编码,下列不是计算机上使用的汉字编码的是( )。 A.字型码 B.外码 C.内码 D.条形码...
- R如何读取txt文件
- -bash: netstat: 未找到命令
- 海康java版本SDK中jna.jar的说明
- 通过IP查找ip所对应网卡名
- linux32 浏览器,谷歌停止支持32位linux系统的Chrome浏览器