Pagini recente » Cod sursa (job #480692) | Cod sursa (job #1738601) | Cod sursa (job #3209082) | Cod sursa (job #3158926) | Cod sursa (job #466157)
Cod sursa(job #466157)
#include <fstream>
#include <cstring>
using namespace std;
typedef struct{
int val,tata;
} arbore;
arbore nod[100001],v;
int comb(int n,int k)
{
int nkf,kf,nf,i,prod;
nkf=0; prod=1; kf=0; nf=0;
if(k>n) return 0;
if(k==n) return 1;
for(i=1;i<=n;i++)
{
prod=(prod*i)%1000000007;
if(i==n-k) nkf=prod;
if(i==k) kf=prod;
}
nf=prod;
return (nf/(nkf*kf))%1000000007;
}
int factorial(int n)
{
int i,prod=1;
for(i=1;i<=n;i++) prod=(prod*i)%1000000007;
return prod%1000000007;
}
int main()
{
int sol,t,i,n,x,k,y,fii[100001];
ifstream fi("colorare3.in");
ofstream fo("colorare3.out");
memset(nod,0,sizeof(nod));
fi>>n>>k;
nod[n].val=n;
for(i=1;i<=n-1;i++)
{
nod[i].val=i;
fi>>x>>y;
if(nod[y].tata==0) {nod[y].tata=x; fii[x]++; } else {nod[x].tata=y; fii[y]++; }
}
sol=1;
for(i=1;i<=n;i++)
{
v=nod[i];
if(fii[v.val]!=0)
{
if(v.tata!=0) t=1; else t=0;
sol*=factorial(fii[v.val])*comb(k-t,fii[v.val])%1000000007;
}
}
fo<<sol%1000000007<<"\n";
fo.close();
return 0;
}