Pagini recente » Cod sursa (job #2113776) | Cod sursa (job #1984463) | Cod sursa (job #2489621) | Cod sursa (job #1034960) | Cod sursa (job #1503715)
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
#define MOD 30011
#define MAX 107
ifstream in("iepuri.in");
ofstream out("iepuri.out");
vector <int> v[MAX];
vector <int> a;
int mat[MAX][MAX];
bitset <MAX> viz;
int k;
int f[MAX];
int maxi[MAX];
inline void build(int nod,int dist)
{
viz[nod]=1;
for(vector<int> ::iterator it=v[nod].begin(); it!=v[nod].end(); it++)
{
if(!viz[*it])build(*it,dist+1);
maxi[nod]=max(maxi[nod],maxi[*it]+1);
}
if(v[nod].size()==0)
{
maxi[nod]=0;
for(int j=dist; j<=k; j++)
{
mat[nod][j]=1;
}
return;
}
int l;
int prod=1,sum=0;
for(int j=dist; j<=k-maxi[nod]; j++) //3 la 4
{
prod=1;
for(vector<int> ::iterator it=v[nod].begin(); it!=v[nod].end(); ++it)
{
//9 si 8
sum=0;
for( l=j+1; l<=k-maxi[*it]; l++)
{
sum=(sum+mat[*it][l]%MOD)%MOD;
}
prod=(prod*sum%MOD)%MOD;
}
mat[nod][j]=prod%MOD;
}
}
int main()
{
int n,x,y,i,j;
in>>n>>k;
for(i=1; i<=n-1; i++)
{
in>>x>>y;
v[x].push_back(y);
f[y]++;
}
int nan;
for(i=1; i<=n; i++)
if(f[i]==0)nan=i;
build(nan,1);
int s=0;
for(i=1; i<=k; i++)
s=(s+mat[nan][i]%MOD)%MOD;
out<<s%MOD;
return 0;
}