結果
| 問題 |
No.654 Air E869120
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-06-11 22:02:57 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 2,195 bytes |
| コンパイル時間 | 418 ms |
| コンパイル使用メモリ | 82,568 KB |
| 実行使用メモリ | 78,876 KB |
| 最終ジャッジ日時 | 2024-06-24 03:22:53 |
| 合計ジャッジ時間 | 4,654 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | RE * 5 |
| other | RE * 35 |
ソースコード
import sys
input = sys.stdin.readline
# from collections import defaultdict
INF = 10**13
def dfs_for_Ford_Fulkerson(N,E,capacity,s,g,flowing):
stack = [(s,INF)]
root = [0]*N
root[s] = -1
V = [False]*N
V[s] = True
while stack:
u, flow = stack.pop()
for v in E[u]:
if not V[v] and capacity[(u,v)] > 0:
root[v] = u
V[v] = True
if v == g:
if capacity[(u,v)] < flow:
flow = capacity[(u,v)]
break
stack.append((v, min(flow, capacity[(u,v)])))
else:
continue
break
else:
return False
now = g
while now != s:
before = root[now]
capacity[(before, now)] -= flow
capacity[(now, before)] += flow
now = before
flowing[0] += flow
return True
def Ford_Fulkerson(N,E,capacity, s, g):
flowing = [0]
while dfs_for_Ford_Fulkerson(N,E,capacity,s,g, flowing):
pass
return flowing[0]
def main():
N, M, d = map( int, input().split())
UVPQW = [ tuple( map( int, input().split())) for _ in range(M)]
L = 10**9
X = [(u << 32)+p for u,_,p,_,_ in UVPQW]
Y = [(v << 32)+q+d for _,v,_,q,_ in UVPQW]
nodes = sorted(set(X+Y))
VtoI = {x: i for i, x in enumerate(nodes)}
L = len(nodes)
s = L
g = L+1
G = [[] for _ in range(L+2)]
capacity = defaultdict( int)
u, t = divmod(nodes[0], 1<<32)
if u == 1:
G[s].append(0)
capacity[(s,0)] = INF
G[0].append(s)
u, t = divmod(nodes[-1], 1<<32)
if u == N:
G[L-1].append(g)
capacity[(L-1,g)] = INF
G[g].append(L-1)
for i, (x, y) in enumerate(zip(nodes, nodes[1:])):
if x >> 32 == y >> 32:
G[i].append(i+1)
capacity[(i,i+1)] = INF
G[i+1].append(i)
W = [ w for _,_,_,_,w in UVPQW]
for x, y, w in zip(X, Y, W):
a = VtoI[x]
b = VtoI[y]
G[a].append(b)
capacity[(a,b)] += w
G[b].append(a)
# print(L+2)
print( Ford_Fulkerson(L+2,G,capacity,s,g))
if __name__ == '__main__':
main()