結果
| 問題 |
No.1308 ジャンプビーコン
|
| コンテスト | |
| ユーザー |
りあん
|
| 提出日時 | 2020-12-04 20:12:02 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 3,508 ms / 4,000 ms |
| コード長 | 1,043 bytes |
| コンパイル時間 | 251 ms |
| コンパイル使用メモリ | 82,116 KB |
| 実行使用メモリ | 270,636 KB |
| 最終ジャッジ日時 | 2024-09-15 08:13:09 |
| 合計ジャッジ時間 | 50,371 ms |
|
ジャッジサーバーID (参考情報) |
judge6 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 37 |
ソースコード
#!/usr/bin/env pypy3
import sys
from collections import deque
sys.setrecursionlimit(6000)
INF = 2 ** 60
def get_dist(s, g):
if s == g:
return 0
dist = [INF for _ in edge]
dist[s] = 0
q = deque()
q.append(s)
while True:
p = q.popleft()
for c, t in edge[p]:
if t == g:
return dist[p] + c
if dist[t] == INF:
dist[t] = dist[p] + c
q.append(t)
def dfs(p, par, l, ds):
dp[p] += min(l, ds)
for c, t in edge[p]:
if t == par:
continue
dp[p] = min(dp[p], dfs(t, p, l + c, ds))
return dp[p]
n, q, c = map(int, input().split())
edge = [[] for _ in range(n)]
for _ in range(n - 1):
u, v, l = map(int, input().split())
u -= 1
v -= 1
edge[u].append((l, v))
edge[v].append((l, u))
x = list(map(lambda y: int(y) - 1, input().split()))
dp = [INF for _ in range(n)]
dp[x[0]] = 0
for prev, y in zip(x, x[1:]):
d = get_dist(prev, y)
dfs(y, -1, c, d)
print(min(dp))
りあん