結果
問題 |
No.1507 Road Blocked
|
ユーザー |
![]() |
提出日時 | 2025-06-04 20:55:12 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 332 ms / 2,000 ms |
コード長 | 879 bytes |
コンパイル時間 | 451 ms |
コンパイル使用メモリ | 81,920 KB |
実行使用メモリ | 174,208 KB |
最終ジャッジ日時 | 2025-06-04 20:55:23 |
合計ジャッジ時間 | 10,747 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
import sys sys.setrecursionlimit(100050) N = int(input()) MOD = 998244353 fact = [1] * (N + 1) rfact = [1] * (N + 1) r = 1 for i in range(1, N + 1): fact[i] = r = r * i % MOD rfact[N] = r = pow(fact[N], -1, MOD) for i in range(N, 0, -1): rfact[i - 1] = r = r * i % MOD # nCk (mod MOD) を求める def comb(n, k): return fact[n] * rfact[k] * rfact[n - k] % MOD UV = [list(map(int, input().split())) for _ in range(N - 1)] X = [0] * N E = [[] for _ in range(N)] for u, v in UV: u -= 1 v -= 1 E[u].append(v) E[v].append(u) def dfs(x, p=-1): ret = 1 for y in E[x]: if y != p: ret += dfs(y, x) X[x] = ret return ret dfs(0) ans = 0 for x in X[1:]: if N - x > 1: ans += comb(N - x, 2) if x > 1: ans += comb(x, 2) ans %= MOD ans *= pow(comb(N, 2) * (N - 1), -1, MOD) ans %= MOD print(ans)