Pagini recente » Cod sursa (job #466317) | Cod sursa (job #466349) | Cod sursa (job #565212) | Borderou de evaluare (job #565528) | Cod sursa (job #466364)
Cod sursa(job #466364)
#include <fstream>
using namespace std;
int v[1<<17],f[1<<17],n,k;
bool fix[1<<17];
const long long mod=1000000007;
ifstream in("colorare3.in");
ofstream out ("colorare3.out");
long long a(int n,int k)
{
if (n<k)
return 0;
long long s=1;
for (int i=n-k+1;i<=n;i++)
s=(long long)(s*i)%mod;
return s;
}
int main()
{
long long sol;
int x,y,i;
in>>n>>k;
for (i=1;i<n;i++)
{
in>>x>>y;
f[x]++;
f[y]++;
if (fix[x])
{
v[x]++;
fix[y]=true;
continue;
}
if (fix[y])
{
fix[x]=true;
v[y]++;
continue;
}
fix[x]=true;
fix[y]=true;
v[x]=1;
}
sol=1;
k--;
x=1;
for (i=2;i<=n;i++)
if (f[x]<f[i])
x=i;
for (i=1;i<=n;i++)
if (v[i])
{
if (i==x)
sol=((long long)sol*a(k+1,v[i]))%mod;
else
sol=((long long)sol*a(k,v[i]))%mod;
}
out<<sol<<"\n";
return 0;
}