結果
問題 | No.2004 Incremental Coins |
ユーザー |
![]() |
提出日時 | 2025-03-26 15:50:24 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,393 bytes |
コンパイル時間 | 328 ms |
コンパイル使用メモリ | 82,452 KB |
実行使用メモリ | 77,472 KB |
最終ジャッジ日時 | 2025-03-26 15:51:15 |
合計ジャッジ時間 | 5,580 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 6 TLE * 1 -- * 13 |
ソースコード
MOD = 998244353def main():import sysinput = sys.stdin.readdata = input().split()ptr = 0N = int(data[ptr])ptr += 1K = int(data[ptr])ptr += 1A = list(map(int, data[ptr:ptr + N + 1]))ptr += N + 1P = list(map(int, data[ptr:ptr + N]))ptr += N# Compute depth for each node (0-based)depth = [0] * (N + 1)for j in range(1, N + 1):depth[j] = depth[P[j-1]] + 1# Binary Lifting (Doubling) setup for ancestorsLOG = 20 # Enough for 2^20 > 2e5up = [[-1] * (N + 1) for _ in range(LOG)]# up[k][j] is 2^k ancestor of j# j ranges from 0 to Nfor j in range(N + 1):up[0][j] = P[j-1] if j != 0 else -1 # j=0 has no parentfor k in range(1, LOG):for j in range(N + 1):if up[k-1][j] == -1:up[k][j] = -1else:up[k][j] = up[k-1][up[k-1][j]]# Precompute inversesmax_L = max(depth)L_max = min(max_L, K)inv = [1] * (L_max + 2)for i in range(1, L_max + 1):inv[i] = pow(i, MOD - 2, MOD)# Precompute comb[L] = C(K, L) mod MODcomb = [0] * (L_max + 1)comb[0] = 1for L in range(1, L_max + 1):term = (K - L + 1) % MODterm = (term + MOD) % MOD # Ensure non-negativecomb_L = comb[L-1] * term % MODcomb_L = comb_L * inv[L] % MODcomb[L] = comb_L# Now, for each node j, add A[j] * comb[L] to each ancestor i at distance Lans = [0] * (N + 1)for j in range(N + 1):current = jmax_L_j = min(depth[j], K)for L in range(0, max_L_j + 1):# Find ancestor at distance L from j# To find L-th ancestor of jif L == 0:i = jelse:i = jcnt = Lfor k in reversed(range(LOG)):if cnt >= (1 << k):cnt -= (1 << k)i = up[k][i]if i == -1:breakif cnt != 0 or i == -1:# No such ancestorcontinue# Add A[j] * comb[L] to ans[i]ans[i] = (ans[i] + A[j] * comb[L]) % MODfor x in ans:print(x % MOD)if __name__ == "__main__":main()