結果
問題 | No.1812 Uribo Road |
ユーザー |
![]() |
提出日時 | 2022-01-14 22:50:32 |
言語 | PyPy3 (7.3.15) |
結果 |
MLE
|
実行時間 | - |
コード長 | 1,783 bytes |
コンパイル時間 | 206 ms |
コンパイル使用メモリ | 82,536 KB |
実行使用メモリ | 1,111,088 KB |
最終ジャッジ日時 | 2024-11-20 13:20:35 |
合計ジャッジ時間 | 72,842 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 15 TLE * 10 MLE * 5 |
ソースコード
import sys#input = sys.stdin.readline #文字列につけてはダメinput = sys.stdin.buffer.readline #文字列につけてはダメ#sys.setrecursionlimit(1000000)#import bisect#import itertools#import randomfrom heapq import heapify, heappop, heappush#from collections import defaultdict#from collections import deque#import copy#import math#from functools import lru_cache#MOD = pow(10,9) + 7#MOD = 998244353def main():N,M,K = map(int,input().split())R = list(map(int,input().split()))R = [r-1 for r in R]R.sort()dic = {}req = 0G = [[] for _ in range(N)]for i in range(M):a,b,c = map(int,input().split())a -= 1; b -= 1G[a].append((c,b))G[b].append((c,a))if req < K and i == R[req]:dic[(a,b)] = reqdic[(b,a)] = reqreq += 1#print(dic)dis = dijkstra_heap2(0,K,G,dic)ans = dis[-1]print(ans)def dijkstra_heap2(s,K,G,dic):INF = pow(10,18)#S:start, V: node, E: Edge, G: GraphV = len(G)K2 = 1 << K#d[i][j]: i番目の頂点にいて通った道の状態がjの時の最短経路#idx = i * K2 + jd = [INF for _ in range(V * K2)]d[s] = 0PQ = []heappush(PQ,(0,s))while PQ:c,vidx = heappop(PQ)vi = vidx // K2vj = vidx % K2if d[vidx] < c:continued[vidx] = cfor cost,ui in G[vi]:uj = vjif (vi,ui) in dic:uj = vj | 1 << dic[(vi,ui)]uidx = ui * K2 + ujif d[uidx] <= cost + d[vidx]:continued[uidx] = cost + d[vidx]heappush(PQ,(d[uidx], uidx))return dif __name__ == '__main__':main()