Pagini recente » Cod sursa (job #873481) | Cod sursa (job #2515796) | Cod sursa (job #2885957) | Cod sursa (job #1261428) | Cod sursa (job #479398)
Cod sursa(job #479398)
#include <vector>
#include <fstream>
using namespace std;
const int MOD=1000000007;
const int NMAX=100001;
typedef long long i64;
int N,K;
i64 aranj[2][NMAX];
vector<int> G[NMAX];
i64 doit(int x,int dad)
{
i64 ret=1;
int nr=0;
for (vector<int>::iterator it=G[x].begin();it!=G[x].end();++it)
if (*it != dad)
{
++nr;
ret=(ret*doit(*it,x))%MOD;
}
ret=(ret*aranj[1][nr])%MOD;
return ret;
}
int main()
{
int i,j,k;
ifstream fin("colorare3.in");
fin>>N>>K;
for (k=1;k<=N-1;++k)
{
fin>>i>>j;
G[i].push_back(j);
G[j].push_back(i);
}
for (k=0;k<2;++k)
{
int n=K-k;
aranj[k][0]=1;
for (i=1;i<=N-1 && i<=n;++i)
aranj[k][i]=(aranj[k][i-1]*(n-i+1))%MOD;
}
ofstream fout("colorare3.out");
i64 sol=1;
for (vector<int>::iterator it=G[1].begin();it!=G[1].end();++it)
sol=(sol*doit(*it,1))%MOD;
sol=(sol*aranj[0][G[1].size()])%MOD;
fout<<sol<<"\n";
return 0;
}