結果

問題 No.1507 Road Blocked
ユーザー ntuda
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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)
0