結果

問題 No.2949 Product on Tree
ユーザー ああいい
提出日時 2025-02-25 10:52:47
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 710 ms / 2,000 ms
コード長 816 bytes
コンパイル時間 805 ms
コンパイル使用メモリ 81,920 KB
実行使用メモリ 149,212 KB
最終ジャッジ日時 2025-02-25 10:53:23
合計ジャッジ時間 34,657 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 46
権限があれば一括ダウンロードができます

ソースコード

diff #

N = int(input())
A = list(map(int,input().split()))
P = 998244353
G = [[] for _ in range(N)]
for _ in range(N - 1):
    u,v = map(int,input().split())
    u -= 1
    v -= 1
    G[u].append(v)
    G[v].append(u)

dp = [0] * N
stack = [(0,-1),(~0,-1)]

ans = 0
r = pow(2,P - 2,P)
while stack:
    now,parent = stack.pop()
    if now < 0:
        now = ~now
        for v in G[now]:
            if v != parent:
                stack.append((v,now))
                stack.append((~v,now))
        continue

    tmp = 0
    t = 0
    for v in G[now]:
        if v != parent:
            t += dp[v]
            t %= P
            tmp += dp[v] * dp[v] % P
            tmp %= P
    x = A[now]
    ans += x * t % P
    ans += x * (t * t % P - tmp) % P * r % P
    ans %= P

    dp[now] = (t * x + x)% P
print(ans)
#print(dp)
0