环路旅行
题目大意
给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过?(一个点在路径中无论出现多少正整数次对答案的贡献均为1)
思路
我们一看就可以知道就是从第一个点出发必定能走到跟它一个强连通分量的点,所以我们就先跑一遍强连通分量,缩完点之后我们再想怎么办。因为我们知道,我们要求从1走出去又走回来,所以必定是要找到一个环,但是我们一想,缩完点的图肯定是没有环的,否则这个环上的所有点都会再重新组成一个更大的强连通分量,但这肯定不可能。所以我们要求的值必定是一个环上有一条边反了过来的最大值,口糊可能难以理解,上图,只有两种情况:
这两种情况本质是一样,所以我们可以发现了,实际上这个问题实际上就是让我们求两个点经过1号点的最大路径,那我们就可以跑两边Spfa,一边跑正图,一边跑反图,就可以求1到每个点的距离和每个点到1的距离,然后再用 O