Easy SSSP
题号:NC50386
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld

题目描述

输入数据给出一个有N个节点,M条边的带权有向图。要求你写一个程序,判断这个有向图中是否存在负权回路。如果从一个点沿着某条路径出发,又回到了自己,而且所经过的边上的权和小于0,就说这条路是一个负权回路。
如果存在负权回路,只输出一行-1;如果不存在负权回路,再求出一个点S到每个点的最短路的长度。约定:S到S的距离为0,如果S与这个点不连通,则输出NoPath

输入描述:

第一行三个正整数,分别为点数N,边数M,源点S;

以下M行,每行三个整数a,b,c,表示点a,b之间连有一条边,权值为c。

输出描述:

如果存在负权环,只输出一行-1,否则按以下格式输出:
共N行,第i行描述S点到点i的最短路:

如果S与i不连通,输出NoPath;

如果i=S,输出0。

其他情况输出S到i的最短路的长度。
示例1

输入

复制
6 8 1
1 3 4
1 2 6
3 4 -7
6 4 2
2 4 5
3 6 3
4 5 1
3 5 4

输出

复制
0
6
4
-3
-2
7

备注:

对于全部数据,