POJ1144——Tarjan+计算割点

[点割集与割点]
设无向图G=(V,E),G的连通分支数为X。
如果说存在顶点子集V’,删除V’中所有点(以及点关联的边)之后,子图V-V’的连通分支数Y>X。
那么V’是G的割点集。
如果割点集只有一个节点,则称为割点。

特别的:
无向连通图中G中,去掉某一节点和该节点所有有关联的边之后,剩下的图如果不再连通(连通分支数增加),称该点为割点。<也称为关节点:Articulation Point>。

[点连通度]
图G的点连通度定义为最小割点集合中的顶点数目。

[Tarjan算法求割点]
设在无向图G的DFS树中:
对于一个候选节点v1,当它满足下列两种情况的一种的时候,判断v是割点。[需要注意的是:这里的节点是指在深搜树上的节点而非原图上的节点,相当于将一个无向连通图转换为一棵深搜树后进行相应的判断操作]
1.如果节点v是根节点 v1 == root且root有两个以上的孩子,那么根节点root必定是割点。
2.如果节点v1不是根节点
v1是G的割点当且仅当v1存在一个子节点v2使得v2及其后代都没有反向边回到v1的祖先。(如果v2及v2的后代有反向边连回到v1不影响该结论).
证明:
1.考虑v1的任意子节点v2。如果v2及其后代不能通过后向边连回father节点,那么删除v1后,v2和father不再连通。
[这里体现在代码上即:low[v2] >= dfn[v1]]
如果不理解这两个变量的含义,传送门
2.反过来,如果v2或者它的某一个后代存在一条反向边连回father节点,则删除v1后,以v2为根的整棵子树都可以连回father。

这里写图片描述

/*
POJ 1144
算法:裸求无向连通图的割点
错误:误以为和一个节点v1有关系的节点{v2,v3....}在深搜树上一定是v1的儿子,实际上各种情况都存在(而且很有可能是叶子)
因为{v2,v3...}也会与其他的节
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值