POJ 1523 SPF题解 Tarjan 割点

题目链接:POJ 1523 SPF
题目描述:

给定一张连通的无向图,问哪些结点是割点,分别删除各个割点时会产生几个强连通分量。

题解:

求割点可以通过Tarjan算法来解决,我们接下来考虑删除一个割点后会产生多少个联通块。
Tarjan算法中,我们判断一个点是否是割点是通过其子结点能否回到遍历过的结点来判断。如果当前遍历的结点存在一个子结点不能够回到已经遍历过的结点,那么当前遍历的结点便是一个割点(这样的依据是删除当前的结点后,这个不能回到遍历过的结点的子节点会变成一个新的强连通分量),如果我们记录cnt表示当前结点有多少个子结点不能够回到已经遍历过的结点,那么不难发现对于非根结点而言,如果当前的结点是一个割点,那么会产生cnt+1(这cnt个儿子所在的强连通分量和当前结点父亲所在的强连通分量)个强连通分量。对于根节点而言,不难发现如果他有cnt个儿子结点,那么当cnt>=2是根节点是一个割点,删除根结点会产生cnt个强连通分量。

代码:POJ1523

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值