結果
問題 | No.654 Air E869120 |
ユーザー |
![]() |
提出日時 | 2024-05-06 00:44:39 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,057 bytes |
コンパイル時間 | 86 ms |
コンパイル使用メモリ | 12,800 KB |
実行使用メモリ | 12,928 KB |
最終ジャッジ日時 | 2024-11-28 02:21:34 |
合計ジャッジ時間 | 7,898 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 31 WA * 4 |
ソースコード
import sysinput = sys.stdin.readlinefrom operator import itemgetterN,M,d=map(int,input().split())F=[list(map(int,input().split())) for i in range(M)]F.sort(key=itemgetter(2))# dinic法from collections import defaultdict,dequeV=M+2EDGE=[defaultdict(int) for i in range(V)]start=V-2goal=V-1for i in range(M):u,v,p,q,w=F[i]if u==1:EDGE[start][i]=wif v==N:EDGE[i][goal]=wfor j in range(i):u0,v0,p0,q0,w0=F[j]if v0==u and q0+d<=p:EDGE[j][i]=wANS=0while True:# まずBFSするDIS=[-1]*VQ=deque([start])DIS[start]=0EDGE2=[[] for i in range(V)]while Q:x=Q.popleft()for to in EDGE[x]:if EDGE[x][to]==0:continueif DIS[to]==-1:DIS[to]=DIS[x]+1Q.append(to)EDGE2[x].append(to)elif DIS[to]==DIS[x]+1:EDGE2[x].append(to)if DIS[goal]==-1:break# BFSしたときのEDGEを使ってDFSするMINCOST=[float("inf")]*VNOW=startROUTE=[-1]*Vwhile NOW!=-1: # DFScost=MINCOST[NOW]if NOW==goal:ANS+=costi=goalwhile i!=start: # goalからたどり,Routeを使ってEDGEの更新j=ROUTE[i]if EDGE[j][i]==cost:NOW=jEDGE2[j].pop()EDGE[j][i]-=cost # 使ったルートをいけなく更新MINCOST[j]-=costEDGE[i][j]+=cost # 逆向きに進めるようにする.i=jcontinueif EDGE2[NOW]:to=EDGE2[NOW][-1]ROUTE[to]=NOWMINCOST[to]=min(cost,EDGE[NOW][to])NOW=toelse:if NOW==start:breakEDGE2[ROUTE[NOW]].pop()NOW=ROUTE[NOW]print(ANS)