結果
問題 | No.196 典型DP (1) |
ユーザー |
![]() |
提出日時 | 2021-11-17 01:53:54 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 195 ms / 2,000 ms |
コード長 | 703 bytes |
コンパイル時間 | 1,943 ms |
コンパイル使用メモリ | 82,208 KB |
実行使用メモリ | 109,048 KB |
最終ジャッジ日時 | 2024-12-21 09:23:17 |
合計ジャッジ時間 | 6,252 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 41 |
ソースコード
n,k=map(int,input().split()) edge=[[] for i in range(n)] for i in range(n-1): a,b=map(int,input().split()) edge[a].append(b) edge[b].append(a) mod=10**9+7 dp=[[0]*(n+1) for i in range(n)] for i in range(n): dp[i][0]=1 if len(edge[i])==1 and i!=0: dp[i][1]=1 d=[(0,0,0)] seen=[1]*n size=[1]*n while d: x,y,z=d.pop() if x==0: seen[y]=0 for i in edge[y]: if seen[i]: d.append((1,i,y)) d.append((0,i,y)) else: dp_new=[0]*(n+1) for k1 in range(size[z]): for k2 in range(size[y]+1): dp_new[k1+k2]+=dp[z][k1]*dp[y][k2] size[z]+=size[y] for i in range(size[z]+1): dp[z][i]=dp_new[i]%mod dp[z][size[z]]=1 print(dp[0][k])