結果
問題 | No.2360 Path to Integer |
ユーザー |
![]() |
提出日時 | 2025-04-18 23:09:16 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 522 ms / 2,500 ms |
コード長 | 1,019 bytes |
コンパイル時間 | 437 ms |
コンパイル使用メモリ | 82,772 KB |
実行使用メモリ | 212,860 KB |
最終ジャッジ日時 | 2025-04-18 23:09:21 |
合計ジャッジ時間 | 4,936 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 15 |
ソースコード
import sys sys.setrecursionlimit(100050) MOD = 998244353 N = int(input()) A = list(map(int, input().split())) E = [[] for _ in range(N)] D = [0] * N L = [0] * 11 for i in range(11): L[i] = pow(10, i, MOD) X = [0] * N B = [0] * N for i, a in enumerate(A): B[i] = L[len(str(a))] for _ in range(N - 1): x, y = map(int, input().split()) x -= 1 y -= 1 E[x].append(y) E[y].append(x) D[x] += 1 D[y] += 1 def dfs(x, p=-1): ret = 0 cnt = 1 for y in E[x]: if y != p: r, c = dfs(y, x) ret += r ret %= MOD cnt += c X[x] = (ret * B[x] + A[x] * cnt) % MOD D[x] = cnt return (X[x], cnt) dfs(0) Y = [0] * N Y[0] = X[0] Q = [0] nv = [1] * N nv[0] = 0 while Q: x = Q.pop() for y in E[x]: if nv[y]: nv[y] = 0 Y[y] = ((Y[x] - X[y] * B[x] - A[x] * D[y]) * B[y] + A[y] * (N - D[y]) + X[y]) % MOD Q.append(y) ans = 0 for y in Y: ans += y ans %= MOD print(ans)