我对这个问题有疑问:
给定一个包含N个顶点和M个边的有向图,请确定“从所有1 <= i, j <= N
的顶点j到顶点j的路径”。
我想解决N <= 500, M <= 250000
。
我发现了使用dfs的天真寻路算法,但时间复杂度为O(N^2 M)
,所以它非常慢。
请告诉我解决它的有效算法。
例如,如果给出了这个图:
答案是否定的,因为没有从4到1的路径。
答案 0 :(得分:1)
我可以使用O(N+M)
复杂度实现以下算法。
取任何顶点u
。使用flood fill算法到达其他顶点。如果无法访问任何顶点,请返回NOK
。
现在也这样做,但转向相反的方向。如果无法访问任何顶点,请返回NOK
。
返回OK
。 (这里我们知道,由于[2],从任何顶点v
到u
都有一条路径,并且存在从u
到任何顶点w
的路径,因为[1])。