結果

問題 No.1094 木登り / Climbing tree
ユーザー lam6er
提出日時 2025-03-20 21:00:47
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 983 ms / 2,000 ms
コード長 1,791 bytes
コンパイル時間 295 ms
コンパイル使用メモリ 82,396 KB
実行使用メモリ 215,520 KB
最終ジャッジ日時 2025-03-20 21:01:16
合計ジャッジ時間 24,286 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 26
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

import sys
from collections import deque
def main():
sys.setrecursionlimit(1 << 25)
input = sys.stdin.read().split()
ptr = 0
n = int(input[ptr])
ptr +=1
adj = [[] for _ in range(n+1)]
for _ in range(n-1):
a = int(input[ptr])
b = int(input[ptr+1])
c = int(input[ptr+2])
ptr +=3
adj[a].append( (b, c) )
adj[b].append( (a, c) )
LOG = 20
parent = [0]*(n+1)
depth = [0]*(n+1)
distance = [0]*(n+1)
root =1
parent[root] =0
q = deque([root])
while q:
u = q.popleft()
for v, w in adj[u]:
if parent[u] == v:
continue
if parent[v] ==0 and v != root:
parent[v] =u
depth[v] = depth[u]+1
distance[v] = distance[u] + w
q.append(v)
up = [[0]*(n+1) for _ in range(LOG)]
for u in range(1, n+1):
up[0][u] = parent[u]
for k in range(1, LOG):
for u in range(1, n+1):
up[k][u] = up[k-1][up[k-1][u]]
def lca(u, v):
if depth[u] < depth[v]:
u, v = v, u
for k in range(LOG-1, -1, -1):
if depth[u] - (1 << k) >= depth[v]:
u = up[k][u]
if u ==v:
return u
for k in range(LOG-1, -1, -1):
if up[k][u] != up[k][v]:
u = up[k][u]
v = up[k][v]
return up[0][u]
q_num = int(input[ptr])
ptr +=1
output = []
for _ in range(q_num):
s = int(input[ptr])
t = int(input[ptr+1])
ptr +=2
lca_node = lca(s, t)
res = distance[s] + distance[t] - 2 * distance[lca_node]
output.append(str(res))
print('\n'.join(output))
if __name__ == '__main__':
main()
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0