結果
| 問題 | No.2377 SUM AND XOR on Tree |
| コンテスト | |
| ユーザー |
KowerKoint2010
|
| 提出日時 | 2023-06-30 07:31:41 |
| 言語 | Ruby (3.4.1) |
| 結果 |
AC
|
| 実行時間 | 2,003 ms / 4,000 ms |
| コード長 | 897 bytes |
| 記録 | |
| コンパイル時間 | 146 ms |
| コンパイル使用メモリ | 7,680 KB |
| 実行使用メモリ | 72,576 KB |
| 最終ジャッジ日時 | 2024-07-06 23:54:16 |
| 合計ジャッジ時間 | 43,546 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 33 |
コンパイルメッセージ
Syntax OK
ソースコード
MOD = 998244353
n = gets.to_i
g = Array.new(n) { [] }
(n - 1).times do
a, b = gets.split.map(&:to_i)
g[a - 1] << b - 1
g[b - 1] << a - 1
end
seen = Array.new(n, false)
seen[0] = true
postorder = []
child = Array.new(n) { [] }
stk = [~0, 0]
while !stk.empty?
u = stk.pop
if u >= 0
g[u].each do |v|
next if seen[v]
seen[v] = true
child[u] << v
stk.push(~v, v)
end
else
postorder << ~u
end
end
a = gets.split.map(&:to_i)
ans = 0
30.times do |k|
dp0 = Array.new(n, 0)
dp1 = Array.new(n, 0)
postorder.each do |u|
if (a[u] >> k & 1) == 1
dp1[u] = 1
else
dp0[u] = 1
end
child[u].each do |v|
ndp0 = dp0[u]*dp0[v] + dp1[u]*dp1[v] + dp0[u]*dp1[v]
ndp1 = dp0[u]*dp1[v] + dp1[u]*dp0[v] + dp1[u]*dp1[v]
dp0[u] = ndp0 % MOD
dp1[u] = ndp1 % MOD
end
end
ans += dp1[0] << k
end
ans %= MOD
puts ans
KowerKoint2010