結果
問題 | No.898 tri-βutree |
ユーザー | Kiri8128 |
提出日時 | 2019-10-06 17:11:30 |
言語 | Python3 (3.12.2 + numpy 1.26.4 + scipy 1.12.0) |
結果 |
AC
|
実行時間 | 2,294 ms / 4,000 ms |
コード長 | 1,142 bytes |
コンパイル時間 | 223 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 63,744 KB |
最終ジャッジ日時 | 2024-11-08 23:01:02 |
合計ジャッジ時間 | 38,392 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1,417 ms
58,752 KB |
testcase_01 | AC | 27 ms
10,880 KB |
testcase_02 | AC | 28 ms
10,880 KB |
testcase_03 | AC | 28 ms
10,880 KB |
testcase_04 | AC | 31 ms
10,880 KB |
testcase_05 | AC | 27 ms
11,008 KB |
testcase_06 | AC | 27 ms
10,880 KB |
testcase_07 | AC | 2,225 ms
63,488 KB |
testcase_08 | AC | 2,160 ms
63,488 KB |
testcase_09 | AC | 2,140 ms
63,616 KB |
testcase_10 | AC | 2,202 ms
63,616 KB |
testcase_11 | AC | 2,238 ms
63,488 KB |
testcase_12 | AC | 2,193 ms
63,488 KB |
testcase_13 | AC | 2,138 ms
63,616 KB |
testcase_14 | AC | 2,160 ms
63,616 KB |
testcase_15 | AC | 2,260 ms
63,744 KB |
testcase_16 | AC | 2,294 ms
63,488 KB |
testcase_17 | AC | 2,269 ms
63,616 KB |
testcase_18 | AC | 2,292 ms
63,616 KB |
testcase_19 | AC | 2,221 ms
63,616 KB |
testcase_20 | AC | 2,232 ms
63,616 KB |
testcase_21 | AC | 2,195 ms
63,616 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]))