Pagini recente » Borderou de evaluare (job #2012097) | Cod sursa (job #2652965) | Cod sursa (job #3136862) | Cod sursa (job #2167017) | Cod sursa (job #467627)
Cod sursa(job #467627)
#include <fstream>
#include <cstring>
using namespace std;
typedef struct{
int val,tata;
} arbore;
int x,y,sol,n,k,t,i,fact[100002],fii[100001],f[100001];
arbore nod[100001],v;
int main()
{
ifstream fi("colorare3.in");
ofstream fo("colorare3.out");
memset(nod,0,sizeof(nod));
fi>>n>>k;
fact[n]=k%1000000007;;
fact[n-1]=k*(k-1)%1000000007;
f[n]=(k-1)%1000000007;;
for(i=k-2;i>=k-n+1 and i>=1;i--)
{
fact[i-k+n]=(fact[i+1-k+n]*i)%1000000007;
f[i-k+n]=(f[i+1-k+n]*i)%1000000007;
}
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)
sol*=f[k-fii[v.val]-k+n+1]%1000000007;
else
sol*=fact[k-fii[v.val]-k+n+1]%1000000007;
}
fo<<sol%1000000007<<"\n";
fo.close();
return 0;
}