82分求助
查看原帖
82分求助
765476
HERITAGE楼主2024/10/2 09:26

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()

2024/10/2 09:26
加载中...