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

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

可先看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了一回。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值