求解割点或点双时一种奇怪写法的说明

一、没有自环的(如果有自环直接先过滤掉即可)无向图上割点,反向边并不需要判断 v != fa,也就是并不需要判断它会回去。这个时候 lowlow 数组的意义发生了改变,但是不影响求解结果。

简单说明一下就是,这样之后相当于,原先如果 low[u]dfn[u]low[u] \ne dfn[u],那么新的 low[u]low[u] 还是原来的 low[u]low[u],但是如果原先 low[u]=dfn[u]low[u] = dfn[u],新的 low[u]low[u] 会变成 uu 的父亲的 dfndfn。会发现:完全不影响 low[v]dfn[u]low[v] \ge dfn[u] 这个判断。

所以可以成为割点的一种偷懒写法。但注意 lowlow 意义已经发生了改变!!因此如果 tarjan 时要用到 lowlow 数组需要慎重考虑一下。

然后,注意割边不能这么偷懒。。

二、在用了第一个偷懒方法的情况下,low[v]dfn[u]low[v] \ge dfn[u] 可以写作 low[v]=dfn[u]low[v] = dfn[u]

因为事实上原来满足 low[v]dfn[u]low[v] \ge dfn[u]low[v]low[v] 就只有两种取值:dfn[v]dfn[v]dfn[u]dfn[u]。那么第一个偷懒方法之后,low[v]=dfn[v]low[v] = dfn[v] 时,low[v]low[v] 会变成 dfn[u]dfn[u]。那么条件自然就可以变换成 low[v]=dfn[u]low[v] = dfn[u]

posted @   dbxxx  阅读(62)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示