Submission #11379640


Source Code Expand

import sys
input = sys.stdin.readline
sys.setrecursionlimit(10 ** 9)

def comb(x, y):
    if 2 * y > x: return comb(x, x-y)
    return fac[x] * inv[y] * inv[x-y] % mod

def dfs(v, root=-1):
    sz, dp = 0, 1
    SZ = []
    SZ_append = SZ.append
    for u in to[v]:
      if u == root: continue
      s, p = dfs(u, v)
      sz += s
      dp *= p % mod
      SZ_append(s)
    tmp =sz
    for s in SZ:
        dp *= comb(tmp, s) % mod
        tmp -= s
    return sz+1, dp

f_inf = float('inf')
mod = 10**9+7
n_max = 1001

n = int(input())
to = [[] for _ in range(n)]
for _ in range(n-1):
    a, b = map(int, input().split())
    a -= 1
    b -= 1
    to[a].append(b)
    to[b].append(a)

fac = [1] * (n+1)
inv = [1] * (n+1)
for i in range(2, n+1):
    fac[i] =  fac[i-1] * i % mod
inv[n] = pow(fac[n], mod - 2, mod)
for i in range(n-1, 1, -1):
    inv[i] = inv[i+1] * (i+1) % mod

ans = 0
for i in range(n):
    ans += dfs(i)[1]
    ans %= mod
print(ans * inv[2] % mod)

Submission Info

Submission Time
Task N - 木
User KFurudate
Language Python (3.4.3)
Score 5
Code Size 1016 Byte
Status AC
Exec Time 1542 ms
Memory 4432 KB

Judge Result

Set Name All
Score / Max Score 5 / 5
Status
AC × 9
Set Name Test Cases
All 00, 01, 02, 03, 04, 05, 06, 90, 91
Case Name Status Exec Time Memory
00 AC 1542 ms 4432 KB
01 AC 1284 ms 3188 KB
02 AC 1270 ms 3188 KB
03 AC 1273 ms 3188 KB
04 AC 1297 ms 3188 KB
05 AC 1305 ms 3188 KB
06 AC 1260 ms 3188 KB
90 AC 17 ms 3064 KB
91 AC 17 ms 3064 KB