結果
問題 | No.2980 Planar Tree 2 |
ユーザー |
![]() |
提出日時 | 2024-12-04 06:37:53 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 789 ms / 2,000 ms |
コード長 | 1,376 bytes |
コンパイル時間 | 397 ms |
コンパイル使用メモリ | 82,560 KB |
実行使用メモリ | 181,308 KB |
最終ジャッジ日時 | 2024-12-04 06:38:11 |
合計ジャッジ時間 | 17,358 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 30 |
ソースコード
mod = 998244353n = 10 ** 6inv = [1 for j in range(n + 1)]for a in range(2,n + 1):# ax + py = 1 <=> rx + p(-x-qy) = -q => x = -(inv[r]) * (p//a) (r = p % a)res = (mod - inv[mod % a]) * (mod // a)inv[a] = res % modfact = [1 for i in range(n + 1)]for i in range(1,n + 1):fact[i] = fact[i - 1] * i % modfact_inv = [1 for i in range(n + 1)]fact_inv[-1] = pow(fact[-1],mod - 2,mod)for i in range(n,0,-1):fact_inv[i - 1] = fact_inv[i] * i % moddef binom(n,r):if n < r or n < 0 or r < 0:return 0res = fact_inv[n - r] * fact_inv[r] % modres *= fact[n]res %= modreturn resN = int(input())G = [[] for u in range(N)]for i in range(N - 1):u, v = map(int, input().split())u, v = u - 1, v - 1G[u].append(v)G[v].append(u)D = [0 for u in range(N)]RG = [[] for u in range(N)]r = 0stack = [r]visit = []while len(stack):u = stack.pop()visit.append(u)for v in G[u]:if D[v] > 0:continueD[u] += 1RG[u].append(v)stack.append(v)sub = [0 for u in range(N)]for u in visit[:-1]:for v in RG[u]:sub[u] += sub[v] + 1ans = 1for u in range(N):x = 0for v in RG[u]:ans = ans * (1 + sub[v]) % modif D[v] == 0:x += 1res = fact[D[u] - x] * binom(sub[u], x) % modans = ans * (res * fact[x] % mod) % modans = ans * pow(fact[N - 1], -1, mod) % modprint(ans)