結果
| 問題 |
No.901 K-ary εxtrεεmε
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-09-27 22:40:45 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 2,059 bytes |
| コンパイル時間 | 220 ms |
| コンパイル使用メモリ | 82,364 KB |
| 実行使用メモリ | 182,600 KB |
| 最終ジャッジ日時 | 2024-06-30 14:04:09 |
| 合計ジャッジ時間 | 22,109 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 28 RE * 1 |
ソースコード
import sys
from collections import deque
input = sys.stdin.readline
N = int(input())
edge = [[] for i in range(N)]
for i in range(N-1):
u,v,w = map(int,input().split())
edge[u].append((v,w))
edge[v].append((u,w))
color_tree_edge = [set([]) for i in range(N)]
Q = int(input())
color = [list(map(int,input().split()))[1:] for i in range(Q)]
for i in range(Q):
for v in color[i]:
color_tree_edge[v].add(i)
#合流点の検出
deq = deque([0])
parent = [-1 for i in range(N)]
depth = [0 for i in range(N)]
parent[0] = 0
topo = []
while deq:
v = deq.popleft()
topo.append(v)
for nv,cost in edge[v]:
if parent[nv]==-1:
parent[nv] = v
depth[nv] = depth[v] + cost
deq.append(nv)
topo = topo[::-1]
node = [set([]) for v in range(N)]
size = [1 for i in range(N)]
for i in range(Q):
for v in color[i]:
node[v].add(i)
for v in topo:
for nv,cost in edge[v]:
if nv!=parent[v]:
size[v] += size[nv]
if len(node[v]) < len(node[nv]):
node[nv],node[v] = node[v],node[nv]
for nv,cost in edge[v]:
if nv!=parent[v]:
for color in node[nv]:
if color in node[v]:
color_tree_edge[v].add(color)
else:
node[v].add(color)
node[nv] = None
res = [0 for i in range(Q)]
#辺の張り直し
vertex = []
def euler_tour(v,pv):
vertex.append(v)
for nv,cost in edge[v]:
if nv!=pv:
euler_tour(nv,v)
vertex.append(v)
euler_tour(0,0)
color_parent = [-1 for i in range(N+1)]
visit = [None for i in range(N+1)]
for v in vertex:
if visit[v] is None:
visit[v] = {}
for nc in color_tree_edge[v]:
if color_parent[nc]!=-1:
res[nc] += depth[v] - depth[color_parent[nc]]
visit[v][nc] = color_parent[nc]
color_parent[nc] = v
else:
for nc in visit[v]:
color_parent[nc] = visit[v][nc]
for i in range(Q):
print(res[i])