Pagini recente » Cod sursa (job #44809) | Cod sursa (job #565817) | Cod sursa (job #1788275) | Cod sursa (job #990427) | Cod sursa (job #2955190)
#include <fstream>
#include <bitset>
#include <vector>
using namespace std;
ifstream cin("iepuri.in");
ofstream cout("iepuri.out");
const int NMAX = 1e2;
const int MOD = 30011;
int dp[NMAX + 1][NMAX + 1], rad, n, k, a, b, ans;
vector <int> subordonati[NMAX + 1];
bitset <NMAX + 1> radacina, fr[NMAX + 1][NMAX + 1];
void dfs(int x, int morcovi){
if(subordonati[x].empty()){
for(int j = 1; j <= k; j++)
dp[x][j] = 1;
return;
}
dp[x][morcovi] = 1;
for(auto y : subordonati[x]){
int suma = 0;
for(int j = morcovi + 1; j <= k; j++){
if(fr[y][j] == 0){
fr[y][j] = 1;
dfs(y, j);
}
suma += dp[y][j];
}
suma %= MOD;
dp[x][morcovi] *= suma;
dp[x][morcovi] %= MOD;
}
}
int main(){
cin >> n >> k;
for(int i = 0; i < n - 1; i++){
cin >> a >> b;
subordonati[a].push_back(b);
radacina[b] = 1;
}
for(int i = 1; i <= n; i++)
if(!radacina[i])
rad = i;
for(int morcovi = 1; morcovi <= k; morcovi++){
dfs(rad, morcovi);
ans += dp[rad][morcovi];
ans %= MOD;
}
cout << ans;
return 0;
}