tarjan训练

如你所见,我本打算在7月练这个,但是今天恰好放这个的课,所以提前练了

首先复习强连通、点双、边双、缩点、割点、2-SAT

P1653

强连通分量跑一遍

转化为DAG,连尽量少条双向边成为SCC

最优的方法是练入度为零的点和出度为零的点

这样连可以将入度出度都不为零的点一并搞掉

所以就是入度为零的点和出度为零的点的max

P2863

板子题

P4171

2-SAT板子题

CF1715D

经典套路拆位

拆位之后就是2-SAT模板

arc161e

随机化然后check

考虑使用2-SAT

考虑 $ s $ 与 $ a,b,c $ 相邻

显然有:

若 $ col_s != col_a $ ,那么 $ col_b == col_c == col_s $

$ col_s $ 是随机化搞出来的

按上式连边跑2-SAT即可

P4819

考虑缩点,那么每个SCC只需要随机一个询问,如果没事就可以将整个SCC查一遍

在DAG上,我们显然要尽量询问入度为0的点,设入度为零的SCC个数为 $ ans $

那么答案为 $ \frac{n-ans}{n} $

但是有特殊情况

如果对于某一个入度为零的SCC,它的大小为 $ 1 $ ,并且所连的所有SCC都能够被其它入度为0的SCC查到,那么它就不用查了。

具体地,只要先把其他的入度为0的SCC查了,最后只剩下这一个点,那么显然这个点就是杀手了。注意当大小大于1时,不知道哪一个是杀手,还是需要查询。

此时答案为 $ \frac{n-ans+1}{n} $

可能以后还有一些

posted @ 2025-06-02 11:21  Minecraft_lb  阅读(15)  评论(0)    收藏  举报