使用STL和拓扑排序在图中查找最长路径
C++
Hard
STL
任务 «使用STL和拓扑排序在图中查找最长路径»
给定一个有向无环图(DAG),包含 N 个顶点和 M 条边。每条边都有一个整数权重(可能为负)。需要找出从给定起始顶点 S 到所有其他顶点的最长路径长度。如果某个顶点不可达,则输出“INF”。请使用拓扑排序(Kahn 算法)和动态规划。限制条件:N ≤ 10^5,M ≤ 2*10^5,权重的绝对值 ≤ 10^9。保证图中不包含环。
输入格式
第一行:N M S(1 ≤ N ≤ 100000,0 ≤ M ≤ 200000,1 ≤ S ≤ N)。接下来的M行:u v w(1 ≤ u, v ≤ N,-10^9 ≤ w ≤ 10^9)。
输出格式
输出 N 行:对于每个顶点 i(从 1 到 N),输出从 S 到 i 的最长路径长度,如果顶点不可达,则输出“INF”。从 S 到 S 的路径长度视为 0。
示例
示例 1
输入
4 3 1
1 2 5
1 3 3
2 4 2
输出
0
5
3
7
示例 2
输入
3 2 1
1 2 -1
2 3 -2
输出
0
-1
-3
main.cpp