結果
| 問題 |
No.1507 Road Blocked
|
| コンテスト | |
| ユーザー |
tpyneriver
|
| 提出日時 | 2021-05-14 22:15:14 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 243 ms / 2,000 ms |
| コード長 | 986 bytes |
| コンパイル時間 | 635 ms |
| コンパイル使用メモリ | 82,560 KB |
| 実行使用メモリ | 111,360 KB |
| 最終ジャッジ日時 | 2024-10-02 01:36:53 |
| 合計ジャッジ時間 | 9,591 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 30 |
ソースコード
import sys
readline = sys.stdin.readline
def parorder(Edge, p):
N = len(Edge)
par = [0]*N
par[p] = -1
stack = [p]
order = []
visited = set([p])
ast = stack.append
apo = order.append
while stack:
vn = stack.pop()
apo(vn)
for vf in Edge[vn]:
if vf in visited:
continue
visited.add(vf)
par[vf] = vn
ast(vf)
return par, order
def getcld(p):
res = [[] for _ in range(len(p))]
for i, v in enumerate(p[1:], 1):
res[v].append(i)
return res
MOD = 998244353
N = int(readline())
Edge = [[] for _ in range(N)]
for _ in range(N-1):
a, b = map(int, readline().split())
a -= 1
b -= 1
Edge[a].append(b)
Edge[b].append(a)
P, L = parorder(Edge, 0)
size = [1]*N
for l in L[:0:-1]:
p = P[l]
size[p] += size[l]
res = 0
for s in size[1:]:
res += s*(s-1) + (N-s)*(N-s-1)
print(res*pow(N*(N-1)*(N-1), MOD-2, MOD)%MOD)
tpyneriver