forked from alexysxeightn/MADE
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtaskD.py
41 lines (35 loc) · 1010 Bytes
/
taskD.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from sys import stdin
INF = 10e18
def find_ways(edges, dist, s, n):
dist[s] = 0
for i in range(n):
for u, v, w in edges:
if dist[u] < INF and dist[v] > dist[u] + w:
dist[v] = max(-INF, dist[u] + w)
def dfs(v, used, graph):
used[v] = True
for u in graph[v]:
if not used[u]:
dfs(u, used, graph)
n, m, s = map(int, stdin.readline().split())
s -= 1
graph = [[] for _ in range(n)]
edges = []
for _ in range(m):
u, v, w = map(int, stdin.readline().split())
u, v = u - 1, v - 1
graph[u].append(v)
edges.append((u, v, w))
dist = [INF] * n
used = [False] * n
find_ways(edges, dist, s, n)
for i in range(n):
for u, v, w in edges:
if dist[u] < INF and dist[v] > dist[u] + w and not used[v]:
dfs(v, used, graph)
answer = [0] * n
for i in range(n):
if dist[i] == INF: answer[i] = '*'
elif used[i]: answer[i] = '-'
else: answer[i] = dist[i]
print(*answer, sep='\n')