Pagini recente » Cod sursa (job #2060855) | Cod sursa (job #1841544)
#include <bits/stdc++.h>
#define Nmax 100005
#define MOD 1000000007
#define pb push_back
using namespace std;
int dp[Nmax],f0[Nmax],f1[Nmax],n,k;
vector <int> L[Nmax];
inline void Dfs(int nod, int tata)
{
int cnt=0;
dp[nod]=1;
for(auto it : L[nod])
if(it!=tata)
{
Dfs(it,nod);
dp[nod]=(1LL*dp[nod]*dp[it])%MOD;
++cnt;
}
if(tata) dp[nod]=(1LL*dp[nod]*f1[cnt])%MOD;
else dp[nod]=(1LL*dp[nod]*f0[cnt])%MOD;
}
int main()
{
int i,x,y;
ifstream cin("colorare3.in");
ofstream cout("colorare3.out");
cin>>n>>k;
for(i=f0[0]=1;i<=n;++i) f0[i]=(1LL*f0[i-1]*(k-i+1))%MOD;
for(i=f1[0]=1;i<=n;++i) f1[i]=(1LL*f1[i-1]*(k-i))%MOD;
for(i=1;i<n;++i)
{
cin>>x>>y;
L[x].pb(y); L[y].pb(x);
}
Dfs(1,0);
cout<<dp[1]<<"\n";
return 0;
}