結果
問題 | No.1442 I-wate Shortest Path Problem |
ユーザー |
|
提出日時 | 2021-02-01 00:45:24 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,957 bytes |
コンパイル時間 | 462 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 111,744 KB |
最終ジャッジ日時 | 2024-10-11 13:35:04 |
合計ジャッジ時間 | 21,855 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 13 TLE * 3 -- * 9 |
ソースコード
def main():import sysinput=sys.stdin.buffer.readlinefrom heapq import heappush,heappopfrom collections import dequen,k=map(int,input().split())g=[[]for _ in range(n+k)]for _ in range(n-1):a,b,c=map(int,input().split())a-=1b-=1g[a].append((b,c))g[b].append((a,c))logn=17dep=[0]*ndis=[1<<60]*nnxt=[[-1]*n for _ in range(logn)]stk=deque([])stk.append((0,-1,0,0,0))while stk:cur,par,cur_dep,cur_dis,idx=stk.pop()dep[cur]=cur_depdis[cur]=cur_disnxt[0][cur]=parif idx!=len(g[cur]):stk.append((cur,par,cur_dep,cur_dis,idx+1))if g[cur][idx][0]!=par:stk.append((g[cur][idx][0],cur,cur_dep+1,cur_dis+g[cur][idx][1],0))for j in range(logn-1):for i in range(n):if nxt[j][i]!=-1:nxt[j+1][i]=nxt[j][nxt[j][i]]def lca(a,b):if dep[a]>dep[b]:a,b=b,ad=dep[b]-dep[a]for j in range(logn):if d>>j&1:b=nxt[j][b]if a==b:return afor j in range(logn-1,-1,-1):if nxt[j][a]!=nxt[j][b]:a=nxt[j][a]b=nxt[j][b]return nxt[0][a]p=[0]*kfor i in range(k):m,p[i]=map(int,input().split())xs=list(map(int,input().split()))for x in xs:g[n+i].append((x-1,0))g[x-1].append((n+i,p[i]))dp=[[1<<60]*(n+k)for _ in range(k)]dik=[]for i in range(k):dpi=dp[i]dpi[n+i]=0heappush(dik,(0,n+i))while dik:d,cur=heappop(dik)if dpi[cur]<d:continuefor to,cost in g[cur]:if dpi[to]>dpi[cur]+cost:dpi[to]=dpi[cur]+costdik.append((dpi[to],to))output=[]q=int(input())for _ in range(q):u,v=map(int,input().split())u-=1v-=1ans=dis[u]+dis[v]-dis[lca(u,v)]*2for i in range(k):if ans>dp[i][u]+dp[i][v]+p[i]:ans=dp[i][u]+dp[i][v]+p[i]output.append(str(ans))print('\n'.join(output))main()