結果
問題 | No.898 tri-βutree |
ユーザー | Kiri8128 |
提出日時 | 2019-10-06 17:10:19 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 820 ms / 4,000 ms |
コード長 | 1,142 bytes |
コンパイル時間 | 211 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 117,632 KB |
最終ジャッジ日時 | 2024-11-08 22:55:52 |
合計ジャッジ時間 | 15,249 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 291 ms
117,632 KB |
testcase_01 | AC | 42 ms
52,608 KB |
testcase_02 | AC | 50 ms
59,520 KB |
testcase_03 | AC | 50 ms
59,648 KB |
testcase_04 | AC | 50 ms
59,392 KB |
testcase_05 | AC | 51 ms
59,520 KB |
testcase_06 | AC | 51 ms
59,520 KB |
testcase_07 | AC | 793 ms
111,912 KB |
testcase_08 | AC | 787 ms
111,272 KB |
testcase_09 | AC | 781 ms
111,972 KB |
testcase_10 | AC | 779 ms
111,420 KB |
testcase_11 | AC | 812 ms
112,216 KB |
testcase_12 | AC | 771 ms
111,360 KB |
testcase_13 | AC | 763 ms
112,084 KB |
testcase_14 | AC | 771 ms
111,688 KB |
testcase_15 | AC | 804 ms
111,788 KB |
testcase_16 | AC | 802 ms
111,516 KB |
testcase_17 | AC | 818 ms
112,048 KB |
testcase_18 | AC | 816 ms
111,576 KB |
testcase_19 | AC | 815 ms
111,924 KB |
testcase_20 | AC | 820 ms
112,284 KB |
testcase_21 | AC | 819 ms
111,864 KB |
ソースコード
import sys input = sys.stdin.readline N = int(input()) X = [[] for i in range(N)] for i in range(N-1): x, y, w = map(int, input().split()) X[x].append((y, w)) X[y].append((x, w)) P = [-1] * N Q = [0] DE = [0] * N DI = [0] * N while Q: i = Q.pop() for a, w in X[i][::-1]: if a != P[i]: P[a] = i X[a].remove((i, w)) Q.append(a) DE[a] = DE[i] + 1 DI[a] = DI[i] + w D = [[P[i] for i in range(N)]] + [[-1]*N for _ in range(16)] for k in range(1, 17): for i in range(N): a = D[k-1][i] if a > 0: D[k][i] = D[k-1][a] def lca(u, v): if DE[u] < DE[v]: u, v = v, u while DE[u] > DE[v]: d = DE[u] - DE[v] dd = d.bit_length() - 1 u = D[dd][u] if u == v: return u for i in range(17)[::-1]: if D[i][u] != D[i][v]: u = D[i][u] v = D[i][v] return D[0][u] for _ in range(int(input())): x, y, z = map(int, input().split()) xx, yy, zz = lca(y, z), lca(z, x), lca(x, y) print((DI[x]+DI[y]+DI[z])-(DI[xx]+DI[yy]+DI[zz]))