Submission #1159661

#TimeUsernameProblemLanguageResultExecution timeMemory
1159661lidplfRobot (JOI21_ho_t4)Pypy 3
24 / 100
1206 ms273788 KiB
import sys from collections import defaultdict import heapq MOD = 1000000007 MOD2 = 998244353 def solve(cas): n, m = map(int, sys.stdin.readline().split()) g = [[] for _ in range(n)] ct = [defaultdict(list) for _ in range(n)] sm = [defaultdict(int) for _ in range(n)] for _ in range(m): a, b, c, d = map(int, sys.stdin.readline().split()) a -= 1 b -= 1 g[a].append((b, c, d, 0)) g[b].append((a, c, d, 0)) ct[a][c].append(b) ct[b][c].append(a) sm[a][c] += d sm[b][c] += d heap = [] heapq.heappush(heap, (0, 0)) for i in range(n): pt = [] for neighbor, col, cc, we in g[i]: if len(ct[neighbor][col]) == 2: pt.append((ct[neighbor][col][0] if ct[neighbor][col][0] != i else ct[neighbor][col][1], col, float('inf'), cc)) for x in pt: g[i].append(x) dp = [float('inf')] * n dp[0] = 0 while heap: weight, node = heapq.heappop(heap) if dp[node] < weight: continue if node == n - 1: print(weight) return for neighbor, col, cc, we in g[node]: if we: if weight + we < dp[neighbor]: dp[neighbor] = weight + we heapq.heappush(heap, (dp[neighbor], neighbor)) continue if weight + min(cc, sm[node][col] - cc) * (len(ct[node][col]) > 1) < dp[neighbor]: dp[neighbor] = weight + min(cc, sm[node][col] - cc) * (len(ct[node][col]) > 1) heapq.heappush(heap, (dp[neighbor], neighbor)) print(-1) def main(): t = 1 # t = int(data[0]) # Uncomment if multiple test cases are needed for i in range(1, t + 1): solve(i) if __name__ == "__main__": main()

Compilation message (stdout)

Compiling 'Main.py'...

=======
  adding: __main__.pyc (deflated 47%)

=======
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...