結果
問題 | No.1301 Strange Graph Shortest Path |
ユーザー | rlangevin |
提出日時 | 2023-10-20 00:17:27 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,917 bytes |
コンパイル時間 | 133 ms |
コンパイル使用メモリ | 82,124 KB |
実行使用メモリ | 179,152 KB |
最終ジャッジ日時 | 2024-09-19 20:12:23 |
合計ジャッジ時間 | 82,750 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 33 ms
60,164 KB |
testcase_01 | AC | 34 ms
53,796 KB |
testcase_02 | AC | 2,308 ms
169,692 KB |
testcase_03 | AC | 2,712 ms
159,360 KB |
testcase_04 | TLE | - |
testcase_05 | AC | 2,104 ms
172,920 KB |
testcase_06 | TLE | - |
testcase_07 | AC | 2,989 ms
167,080 KB |
testcase_08 | AC | 1,742 ms
160,080 KB |
testcase_09 | TLE | - |
testcase_10 | AC | 1,703 ms
159,804 KB |
testcase_11 | AC | 2,761 ms
168,388 KB |
testcase_12 | AC | 2,733 ms
168,640 KB |
testcase_13 | AC | 2,681 ms
170,204 KB |
testcase_14 | AC | 2,212 ms
160,620 KB |
testcase_15 | AC | 2,448 ms
161,592 KB |
testcase_16 | AC | 2,702 ms
173,892 KB |
testcase_17 | TLE | - |
testcase_18 | AC | 2,813 ms
163,264 KB |
testcase_19 | AC | 2,571 ms
166,604 KB |
testcase_20 | AC | 2,816 ms
165,164 KB |
testcase_21 | AC | 2,807 ms
169,888 KB |
testcase_22 | TLE | - |
testcase_23 | TLE | - |
testcase_24 | AC | 2,438 ms
166,536 KB |
testcase_25 | AC | 2,637 ms
173,428 KB |
testcase_26 | AC | 2,880 ms
167,228 KB |
testcase_27 | AC | 2,473 ms
168,020 KB |
testcase_28 | AC | 2,349 ms
167,364 KB |
testcase_29 | TLE | - |
testcase_30 | TLE | - |
testcase_31 | -- | - |
testcase_32 | -- | - |
testcase_33 | -- | - |
testcase_34 | -- | - |
ソースコード
import sys input = sys.stdin.readline # https://tjkendev.github.io/procon-library/python/min_cost_flow/primal-dual.html # 最小費用流(minimum cost flow) class MinCostFlow: def __init__(self, n): self.n = n self.G = [[] for i in range(n)] def addEdge(self, f, t, cap, cost): # [to, cap, cost, rev] self.G[f].append([t, cap, cost, len(self.G[t])]) self.G[t].append([f, 0, -cost, len(self.G[f])-1]) def minCostFlow(self, s, t, f): n = self.n G = self.G prevv = [0]*n; preve = [0]*n INF = 10**18 res = 0 while f: dist = [INF]*n dist[s] = 0 update = 1 while update: update = 0 for v in range(n): if dist[v] == INF: continue gv = G[v] for i in range(len(gv)): to, cap, cost, rev = gv[i] if cap > 0 and dist[v] + cost < dist[to]: dist[to] = dist[v] + cost prevv[to] = v; preve[to] = i update = 1 if dist[t] == INF: return -1 d = f; v = t while v != s: d = min(d, G[prevv[v]][preve[v]][1]) v = prevv[v] f -= d res += d * dist[t] v = t while v != s: e = G[prevv[v]][preve[v]] e[1] -= d G[v][e[3]][1] += d v = prevv[v] return res N, M = map(int, input().split()) G = MinCostFlow(N) for i in range(M): u, v, c, d = map(int, input().split()) u, v = u - 1, v - 1 G.addEdge(u, v, 1, c) G.addEdge(u, v, 1, d) G.addEdge(v, u, 1, c) G.addEdge(v, u, 1, d) print(G.minCostFlow(0, N-1, 2))