Cod sursa(job #2455117)

Utilizator AlexBolfaAlex Bolfa AlexBolfa Data 10 septembrie 2019 20:10:56
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>
#define MAX 104
#define MOD 30011
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");

int n,k,C[MAX][MAX],root,dp[MAX][MAX];
bool hasFather[MAX];
vector <int> child[MAX];

void read();
void dfs(int);
void print();

int main(){
    read();
    dfs(root);
    print();
    return 0;
}
void dfs(int nod){
    for(auto it:child[nod])
        dfs(it);
    int i, t;
    for(i=k;i>=1;--i){
        dp[nod][i]=1;
        for(auto it:child[nod]){
            dp[it][i+1]=(dp[it][i+1]+dp[it][i+2])%MOD;
            t=dp[it][i+1];
            dp[nod][i]= (dp[nod][i]*t)%MOD;
        }
    }
}
void print(){
    int i,S=0;
    for(i=1;i<=k;++i)
        S=(S+dp[root][i])%MOD;
    fout<<S;
}
void read(){
    int i,j,a,b;
    fin>>n>>k;
    for(i=1;i<n;++i){
        fin>>a>>b;
        child[a].push_back(b);
        hasFather[b]=1;
    }
    for(i=1;i<=n;++i)
        if(!hasFather[i]){
            root=i;
            break;
        }
}