結果
| 問題 |
No.1308 ジャンプビーコン
|
| コンテスト | |
| ユーザー |
りあん
|
| 提出日時 | 2020-12-04 19:43:36 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 876 bytes |
| コンパイル時間 | 147 ms |
| コンパイル使用メモリ | 81,896 KB |
| 実行使用メモリ | 271,488 KB |
| 最終ジャッジ日時 | 2024-09-15 08:12:13 |
| 合計ジャッジ時間 | 61,580 ms |
|
ジャッジサーバーID (参考情報) |
judge6 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 35 TLE * 2 |
ソースコード
#!/usr/bin/env pypy3
import sys
sys.setrecursionlimit(6000)
INF = 2 ** 60
def dfs_dist(p, par, g):
if p == g:
return 0
for c, t in edge[p]:
if t == par:
continue
d = c + dfs_dist(t, p, g)
if d < INF:
return d
return INF
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 = dfs_dist(prev, -1, y)
dfs(y, -1, c, d)
print(min(dp))
りあん