构造边双连通图(求桥) poj 3352

来源:互联网 发布:淘宝尺寸如何自定义 编辑:程序博客网 时间:2024/05/06 10:01

很难找到裸求割边的题,于是做了这道求割边的拓展。

可先看http://blog.csdn.net/huyuncong/archive/2011/05/12/6415915.aspx

一条边(u,v)是割边,必须满足它是树边,且low[v]>rel[u](即v是u的孩子,且v无法不通过(u,v)到达u的祖先,这样,一旦(u,v)不存在,v便与u的祖先割开),通过dfs,我们便可求出所有割边(桥)。

求边双连通分量比求点双连通分量简单,将所有桥从图中删去,各个子连通分量便是边双连通分量。

简单提一下求点双连通分量,与求强连通分量类似,我们需要用栈来维护,每dfs点x,将与x相连的树边与回边加入栈,直到遇到rel[u]<=low[v],即u为割点,将栈中元素出栈至遇到(u,v),出栈元素构成点双连通分量,割点同时属于多个分量,其余点属于同一分量,对于点双连通,我暂时还未实现,大家可以去http://www.byvoid.com/blog/biconnect/zh-hans/,其中对于tarjan描述的很清楚。

至于构造双连通图,是指在有桥的图中,加边使之成为双连通图,具体做法是求出边双连通分量,缩点,使之成为一棵树,要加的边的个数即(叶子数+1)/2,加边集合为不断向lca最远叶子连边,收缩路径上点,直至整个图缩完,恰好(叶子数+1)/2次(具体证明我不知道,如有人知道,欢迎评论)。'

poj3352 只需求出边数,据说与poj3177代码一模一样,我鲜有的1A了一回。

 

原创粉丝点击