結果
問題 | No.1442 I-wate Shortest Path Problem |
ユーザー |
|
提出日時 | 2021-02-01 00:45:13 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,849 bytes |
コンパイル時間 | 296 ms |
コンパイル使用メモリ | 13,056 KB |
実行使用メモリ | 119,808 KB |
最終ジャッジ日時 | 2024-10-11 13:34:12 |
合計ジャッジ時間 | 21,327 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 13 TLE * 3 -- * 9 |
ソースコード
def main():import sysinput=sys.stdin.buffer.readlinesys.setrecursionlimit(10**7)from heapq import heappush,heappopn,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)]def dfs(cur,par,cur_dep,cur_dis):dep[cur]=cur_depdis[cur]=cur_disnxt[0][cur]=parfor to,cost in g[cur]:if to!=par:dfs(to,cur,cur_dep+1,cur_dis+cost)dfs(0,-1,0,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]def dist(a,b):return dis[a]+dis[b]-dis[lca(a,b)]*2p=[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):dp[i][n+i]=0heappush(dik,(0,n+i))while dik:d,cur=heappop(dik)if dp[i][cur]<d:continuefor to,cost in g[cur]:if dp[i][to]>dp[i][cur]+cost:dp[i][to]=dp[i][cur]+costdik.append((dp[i][to],to))output=[]q=int(input())for _ in range(q):u,v=map(int,input().split())u-=1v-=1ans=dist(u,v)for 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()