连通图的割点、割边(桥)、块、缩点

割点:删掉它之后(删掉所有跟它相连的边),图必然会分裂成两个或两个以上的子图。

块:没有割点的连通子图

割边:删掉一条边后,图必然会分裂成两个或两个以上的子图,又称桥。

缩点:把没有割边的连通子图缩为一个点,此时满足任意两点间都有两条路径相互可达。

求块跟求缩点非常相似,很容易搞混,但本质上完全不同。割点可以存在多个块中(假如存在k个块中),最终该点与其他点形成k个块,对无割边的连通子图进行缩点后(假设为k个),新图便变为一棵k个点由k-1条割边连接成的树,倘若其中有一条边不是割边,则它必可与其他割边形成一个环,而能继续进行缩点。

一点例题:

pku2942>>

求块后,对每块有:如果存在奇圈,则可以分开开会,否则全T掉,判断奇圈可以用DFS二分染色的方法,当前点染为白色,它所有相邻点染为黑色,如果最后发现某条边两个端点同色,则存在奇圈。

pku3694>>

求割边后,并标记,这时新图形成一棵树,但并不需要缩点,否则反而不好处理,每加一条边w(v,u)进去,必会形成一个圈,剩下的问题但是如何找圈,事先求出v,u的最小公共祖先,加入边w(v,u)后,则这个圈的一部分便是从v到lca(v,u)之间的树边,另一部分是u到lca(v,u)之间的树边,由于一个图中割边的总条数不会超过n,所以可用割边关联的两个顶点中的一个来记录它的位置,这样在沿v或u向lca(v,u)往上找时,快速判断它与它父亲之间相连的边是否为割边,是的话ans-- 并标记为非,因为w(v,u)的加入形成了环,环中原来所有的割边都会变成非割边。用fa[v]表示v的父亲,set[v]表示v的祖先,虽然初始都表示v的父亲,但在LCA时要区分使用,一个只记录它的直接父亲,另一个并查集时压缩路径会改变。

pku 3352>> pku3177>>

求割边,缩点后,形成一棵树,统计度为1的点个数t,需要连的边数则为(t+1)/2,pku3177只是多了重边处理,方法见上。

hdu3394>> 求块,如果一个块的顶点数等于边数,则这个块只有一个环,如果边数大于点数,则必有多个环,容易知道在一个K环的块中,每条边也必属于K个环,这样可以计算出在一个环和多个环里的边总数,剩下的便是不在环中的边。

hdu 3394 Railway 无向图求块

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值