环路旅行

该博客探讨了如何解决一道关于有向图的环路旅行问题。题目要求从节点1出发,返回节点1,并有一次逆向行走的机会,目标是最大化经过的节点数。博主首先解释了问题的本质,即寻找一个环并在环上反向行走一次。通过强连通分量的缩点处理,博主提出使用SPFA算法分别计算正向和反向图中1到其他节点的距离,然后枚举节点对以找到最大路径。文章提供了问题的思路和解决方案,但未包含具体代码。
摘要由CSDN通过智能技术生成

环路旅行

题目大意

给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过?(一个点在路径中无论出现多少正整数次对答案的贡献均为1)

思路

我们一看就可以知道就是从第一个点出发必定能走到跟它一个强连通分量的点,所以我们就先跑一遍强连通分量,缩完点之后我们再想怎么办。因为我们知道,我们要求从1走出去又走回来,所以必定是要找到一个环,但是我们一想,缩完点的图肯定是没有环的,否则这个环上的所有点都会再重新组成一个更大的强连通分量,但这肯定不可能。所以我们要求的值必定是一个环上有一条边反了过来的最大值,口糊可能难以理解,上图,只有两种情况:
在这里插入图片描述在这里插入图片描述
这两种情况本质是一样,所以我们可以发现了,实际上这个问题实际上就是让我们求两个点经过1号点的最大路径,那我们就可以跑两边Spfa,一边跑正图,一边跑反图,就可以求1到每个点的距离和每个点到1的距离,然后再用 O

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值