結果
問題 | No.2377 SUM AND XOR on Tree |
ユーザー |
|
提出日時 | 2023-07-07 22:31:47 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 3,886 ms / 4,000 ms |
コード長 | 1,176 bytes |
コンパイル時間 | 288 ms |
コンパイル使用メモリ | 82,340 KB |
実行使用メモリ | 369,216 KB |
最終ジャッジ日時 | 2024-07-21 18:43:20 |
合計ジャッジ時間 | 64,191 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 33 |
ソースコード
MOD = 998244353N = int(input())edges = [[] for _ in range(N)]for _ in range(N - 1):u, v = map(int, input().split())u -= 1v -= 1edges[u].append(v)edges[v].append(u)A = list(map(int, input().split()))st = []st.append((0, 0))dp = [[[0, 0] for i in range(N)] for b in range(31)]par = [-1] * Nwhile st:now, t = st.pop()if t == 0:st.append((now, 1))for nxt in edges[now]:if par[now] != nxt:st.append((nxt, 0))par[nxt] = nowelse:# print(now)for b in range(31):if (A[now] >> b) & 1:dp[b][now][1] = 1else:dp[b][now][0] = 1for nxt in edges[now]:if nxt != par[now]:tmp0 = dp[b][nxt][0] * dp[b][now][0] + dp[b][nxt][1] * (dp[b][now][0] + dp[b][now][1])tmp1 = dp[b][nxt][0] * dp[b][now][1] + dp[b][nxt][1] * (dp[b][now][0] + dp[b][now][1])dp[b][now][0] = tmp0 % MODdp[b][now][1] = tmp1 % MODans = 0for b in range(31):ans += (1 << b) * dp[b][0][1]ans %= MODprint(ans)