結果
問題 |
No.1843 Tree ANDistance
|
ユーザー |
![]() |
提出日時 | 2025-06-14 18:10:08 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,238 ms / 2,000 ms |
コード長 | 1,002 bytes |
コンパイル時間 | 668 ms |
コンパイル使用メモリ | 82,724 KB |
実行使用メモリ | 381,752 KB |
最終ジャッジ日時 | 2025-06-14 18:10:28 |
合計ジャッジ時間 | 16,943 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 38 |
ソースコード
import sys sys.setrecursionlimit(200050) MOD = 10 ** 9 + 7 N = int(input()) ABC = [list(map(int,input().split())) for _ in range(N-1)] E = [[] for _ in range(N)] def d2b(x): ret = [0] * 30 for i in range(30): ret[i] = x & 1 x >>= 1 return ret for a, b, c in ABC: a -= 1 b -= 1 E[a].append((b,c)) E[b].append((a,c)) def dfs(x,p = -1): ret1 = [0] * 30 ret2 = [0] * 30 for y,c in E[x]: if y != p: tmp = [0] * 30 C = d2b(c) A,B = dfs(y,x) for i in range(30): ret1[i] += A[i] tmp[i] += B[i] * C[i] tmp[i] += C[i] ret1[i] += ret2[i] * tmp[i] ret2[i] += tmp[i] ret1[i] += B[i] ret1[i] %= MOD ret2[i] %= MOD #print(x,ret1,ret2) return((ret1,ret2)) X,Y = dfs(0) #print(X) ans = 0 for i in range(30): ans += (X[i]+Y[i]) * pow(2,i) ans %= MOD print(ans)