其他分享
首页 > 其他分享> > [XSY] 分割

[XSY] 分割

作者:互联网

题目相当于问 删掉两个点后 图是否仍然连通
割点问题,考虑用dfs树解决
设删去点u,v(dfn[v]<dfn[u])
把 u, v 删去之后整棵树大概断成了几个部分:
• v 上面到根的部分,以及上面挂着的那些东西,记作 h i g h high high;
• u 到 v 之间的那一段,以及上面挂着的那些东西,记作 m i d mid mid;
• u ,v的子树们,记作 l o w u low_u lowu​, l o w v low_v lowv​。
在这里插入图片描述
要保证删去u,v后图连通,则 l o w u low_u lowu​, m i d mid mid, l o w v low_v lowv​必须想办法和 h i g h high high连通

l o w v low_v lowv​:每颗子树有非树边连接 h i g h high high
l o w u low_u lowu​:每颗子树 有非树边连接 h i g h high high 或 有非树边连接 m i d mid mid且 m i d mid mid有非树边连接 h i g h high high
m i d mid mid:有非树边连接 h i g h high high 或 有非树边连接 l o w u low_u lowu​的其中一颗子树,同时这颗子树有非树边连接 h i g h high high

当然, f a [ u ] = = v fa[u]==v fa[u]==v的情况略有不同,且 v = = 1 v==1 v==1时要特判


上面的思路除了 加粗字体的情况 没考虑到,其它都想到了
以下是想不出来的实现:


对于 子树内有非树边连接 h i g h high high的条件:
预处理出 low[u] 表示 以u为根的子树通过非树边最高能连到的位置

对于 m i d mid mid有非树边连接 h i g h high high的条件:
预处理出 g[u][k] 表示 u到其 2 k 2^k 2k次祖先 的这一段以及上面挂着的东西中,不算 u,通过非树边最高能到的位置(树上倍增)
(注意:g[u][0]!=low[fa[u]],详见代码)

对于 l o w u low_u lowu​中有非树边连接 m i d mid mid的条件:
考虑转化一下条件,
原条件为 l o w u low_u lowu​通过非树边能连到的位置中至少有一个在[dfn[v]+1,dfn[u]-1]中
我们将其转化为 若[dfn[v]+1,dfn[u]-1]中没有 l o w u low_u lowu​通过非树边能连到的位置,那么边(u,v)不能删
预处理出 slow[u] 表示 以u为根的子树通过非树边第二高能连到的位置

标签:分割,XSY,mid,high,lowu,low,非树边,连接
来源: https://blog.csdn.net/Emma2oo6/article/details/114336755