結果
| 問題 |
No.196 典型DP (1)
|
| コンテスト | |
| ユーザー |
rlangevin
|
| 提出日時 | 2023-01-29 16:26:04 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,207 bytes |
| コンパイル時間 | 150 ms |
| コンパイル使用メモリ | 82,256 KB |
| 実行使用メモリ | 147,328 KB |
| 最終ジャッジ日時 | 2024-06-29 13:13:40 |
| 合計ジャッジ時間 | 8,192 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 3 |
| other | AC * 23 TLE * 1 -- * 17 |
ソースコード
import sys
readline = sys.stdin.readline
from collections import deque
def bfs(G, s, N):
Q = deque([])
dist = [-1] * N
par = [-1] * N
sz = [1] * N
dist[s] = 0
for u in G[s]:
par[u] = s
dist[u] = 1
sz[u] += sz[s]
Q.append(u)
while Q:
u = Q.popleft()
for v in G[u]:
if dist[v] != -1:
continue
dist[v] = dist[u] + 1
par[v] = u
sz[v] += sz[u]
Q.append(v)
return par
def topsort(G):
Q = deque()
N = len(G)
count = [0] * N
for u in range(N):
for v in G[u]:
count[v] += 1
for u in range(N):
if count[u] == 0:
Q.append(u)
anslst = []
while Q:
u = Q.pop()
anslst.append(u)
for v in G[u]:
count[v] -= 1
if count[v] == 0:
Q.append(v)
return anslst
N, K = map(int, input().split())
mod = 10 ** 9 + 7
G = [[] for i in range(N)]
a, b = [0] * (N - 1), [0] * (N - 1)
for i in range(N - 1):
a[i], b[i] = map(int, input().split())
G[a[i]].append(b[i])
G[b[i]].append(a[i])
par = bfs(G, 0, N)
G2 = [[] for i in range(N)]
for i in range(N - 1):
if par[a[i]] == b[i]:
G2[a[i]].append(b[i])
else:
G2[b[i]].append(a[i])
G = topsort(G2)
sz = [1] * N
dp0 = [[0] * 2005 for i in range(2005)]
dp1 = [[0] * 2005 for i in range(2005)]
for i in range(2005):
dp1[i][1] = 1
dp0[i][0] = 1
for u in G:
for v in G2[u]:
sz[v] += sz[u]
merge0 = [0] * (sz[v] + 1)
merge1 = [0] * (sz[v] + 1)
dp0u = dp0[u]
dp0v = dp0[v]
dp1u = dp1[u]
dp1v = dp1[v]
for x in range(sz[u] + 1):
for y in range(x, sz[v] + 1):
merge1[y] += dp1v[y - x] * dp1u[x]
merge0[y] += dp0v[y - x] * dp1u[x]
merge0[y] += dp0v[y - x] * dp0u[x]
merge1[y] %= mod
merge0[y] %= mod
for x in range(sz[v] + 1):
dp0[v][x] = merge0[x]
dp1[v][x] = merge1[x]
print( (dp0[0][K] + dp1[0][K]) % mod )
rlangevin