Pagini recente » Cod sursa (job #2956872) | Cod sursa (job #1361674) | Cod sursa (job #1473080) | Cod sursa (job #2355207) | Cod sursa (job #1568546)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("iepuri2.in");
ofstream fout("iepuri2.out");
const int NMAX = 105;
const int MOD = 30011;
const int INF = 1e9;
vector < int > G[NMAX],Gf[NMAX];
int D[NMAX][NMAX],V[NMAX];
void calcul(const int &nod){
int s,p,ok;
for(int i = 1; i <= V[nod]; i++){
s = 0;
ok = 1;
for(int j = 1; ok != 0; j++){
p = 1;
ok = 0;
for(int k = 0; k < G[nod].size();k++){
if(D[j][G[nod][k]] != 0){
p = (p*D[j][G[nod][k]])%MOD;
ok = 1;
}
if(ok != 0)
s = (s + p)%MOD;
}
}
D[i][nod] = s;
}
}
void vodka(const int &nod,const int &k){
if(G[nod].size() == 0){
if(k - V[nod] + 1 < 0)
D[1][nod] = 0;
else
D[1][nod] = k - V[nod] + 1;
for(int i = 2;i <= D[1][nod];i++){
D[i][nod] = D[i-1][nod];
}
V[nod] = D[1][nod];
return;
}
int mn = INF;
for(int i = 0; i < G[nod].size(); i++){
V[G[nod][i]] = V[nod] + 1;
vodka(G[nod][i],k);
if(V[G[nod][i]] < mn)
mn = V[G[nod][i]];
}
V[nod] = mn;
calcul(nod);
}
main()
{
int n,k,x,y;
fin >> n >> k;
for(int i = 1; i < n; i++){
fin >> x >> y;
G[x].push_back(y);
Gf[y].push_back(x);
}
for(int i = 1; i <= n; i++){
if(Gf[i].size() == 0)
x = i;
}
vodka(x,k);
int s,i = 0;
for(int i = 1; i <= V[x];i++)
s = (s + D[i][x])%MOD;
fout << s;
return 0;
}