Python3, TLE一个点,WA一个点,求助看看代码
from collections import deque
import sys
MAXN = int(5e3) + 10
e = []
head = [0] * MAXN
pos = 0
dis = [-1] * MAXN
vis = [0] * MAXN
in_degree = [0] * MAXN
def add_edge(u, v, w):
global pos
e.append((u, v, w, head[u]))
head[u] = pos
pos += 1
def SPFA(n):
q = deque()
global dis, vis, in_degree
dis = [-1] * MAXN
vis = [0] * MAXN
q.append(0)
vis[0] = True
dis[0] = 1
in_degree[0] = 1
while q:
u = q.popleft()
vis[u] = False
i = head[u]
while i != 0:
v = e[i][1]
w = e[i][2]
if dis[v] < dis[u] + w:
dis[v] = dis[u] + w
if not vis[v]:
q.append(v)
vis[v] = True
in_degree[v] += 1
if in_degree[v] > n + 1:
return False
i = e[i][3]
return True
def main():
global pos
input = sys.stdin.read
data = input().splitlines()
n, m = map(int, data[0].split())
for i in range(1, n + 1):
add_edge(0, i, 0)
for line in data[1: m + 1]:
u, v, w = map(int, line.split())
add_edge(u, v, -w)
if not SPFA(n):
print("NO")
else:
print(" ".join(str(dis[i]) for i in range(1, n + 1)))
if __name__ == "__main__":
main()