結果
問題 |
No.1215 都市消滅ビーム
|
ユーザー |
![]() |
提出日時 | 2025-06-12 13:50:24 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,369 bytes |
コンパイル時間 | 422 ms |
コンパイル使用メモリ | 82,560 KB |
実行使用メモリ | 100,096 KB |
最終ジャッジ日時 | 2025-06-12 13:51:17 |
合計ジャッジ時間 | 9,233 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | -- * 2 |
other | AC * 11 WA * 2 TLE * 1 -- * 26 |
ソースコード
import sys from collections import defaultdict sys.setrecursionlimit(1 << 25) def main(): import sys input = sys.stdin.read data = input().split() idx = 0 N = int(data[idx]) idx += 1 K = int(data[idx]) idx += 1 C = list(map(int, data[idx:idx+K])) idx += K D = list(map(int, data[idx:idx+K])) idx += K edges = [[] for _ in range(N+1)] for _ in range(N-1): a = int(data[idx]) b = int(data[idx+1]) idx += 2 edges[a].append(b) edges[b].append(a) parent = [0]*(N+1) depth = [0]*(N+1) visited = [False]*(N+1) stack = [(1, 0)] while stack: u, p = stack.pop() if visited[u]: continue visited[u] = True parent[u] = p for v in edges[u]: if not visited[v]: depth[v] = depth[u] + 1 stack.append((v, u)) def lca(u, v): while u != v: if depth[u] > depth[v]: u = parent[u] else: v = parent[v] return u pre_lca = [0]*(K+1) pre_lca[0] = 0 for i in range(1, K+1): if i == 1: pre_lca[i] = C[i-1] else: pre_lca[i] = lca(pre_lca[i-1], C[i-1]) suf_lca = [0]*(K+2) suf_lca[K+1] = 0 for i in range(K, 0, -1): if i == K: suf_lca[i] = C[i-1] else: suf_lca[i] = lca(suf_lca[i+1], C[i-1]) pre_sum = [0]*(K+1) for i in range(1, K+1): pre_sum[i] = pre_sum[i-1] + D[i-1] S_total = pre_sum[K] X_values = [] X_values.append(S_total + depth[pre_lca[K]]) for l in range(1, K+1): for r in range(l, K+1): if l == 1 and r == K: continue if l == 1: u = suf_lca[r+1] elif r == K: u = pre_lca[l-1] else: a = pre_lca[l-1] b = suf_lca[r+1] u = lca(a, b) sum_remaining = S_total - (pre_sum[r] - pre_sum[l-1]) if sum_remaining == 0: X = -10**18 else: X = sum_remaining + depth[u] X_values.append(X) X_values.append(-10**18) X_values.sort() m = (len(X_values) + 1) // 2 print(X_values[m-1]) if __name__ == '__main__': main()