Pagini recente » Cod sursa (job #337837) | Cod sursa (job #1365211) | Cod sursa (job #406537) | Cod sursa (job #2817348) | Cod sursa (job #466302)
Cod sursa(job #466302)
#include <cstdio>
#include <vector>
using namespace std;
#define nmax 100010
#define X 1000000007
vector <int> g[nmax];
long long sol;
int v[nmax], n, k;
int perm(int n, int k)
{
long long p=1;
while (k--)
{
p=(p*n)%X;
n--;
}
return p;
}
void bfs(int nod)
{
int i, c=0, d=0, u[nmax];
for (i=0; i<=n; i++) u[i]=0;
for (i=0; i<g[nod].size(); i++)
{
if (v[g[nod][i]]==1) c++; else
{
d++;
v[g[nod][i]]=1;
u[g[nod][i]]=1;
}
}
sol=(sol*perm(k-c, d))%X;
for (i=0; i<g[nod].size(); i++)
if (u[g[nod][i]]==1)
bfs(g[nod][i]);
}
int main()
{
freopen("colorare3.in","r",stdin);
freopen("colorare3.out","w",stdout);
scanf("%d %d",&n,&k);
int i, x, y;
for (i=1; i<n; i++)
{
scanf("%d %d",&x,&y);
g[x].push_back(y);
g[y].push_back(x);
}
v[1]=1;
sol=1;
bfs(1);
printf("%lld",sol);
}