Pagini recente » Cod sursa (job #2970708) | Cod sursa (job #2621384) | Cod sursa (job #1922157) | Cod sursa (job #2096165) | Cod sursa (job #466430)
Cod sursa(job #466430)
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
#define nmax 100010
vector <int> g[nmax];
long long sol,X;
int v[nmax], n, k;
int perm(int n, int k)
{
long long p=1;
while (k--)
{
p=p*n;
p=p-p/X*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;
}
}
int t=perm(k-c,d);
sol=sol*t;
sol=sol-sol/X*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",&n,&k);
int i, x, y, l, j;
X=1000000007;
char s[20];
for (i=1; i<n; i++)
{
fgets(s,15,stdin);
l=strlen(s);
x=y=0;
for (j=0; s[j]!=' '; j++) x=x*10+s[j]-'0';
for (j++; s[j]>='0'&& s[j]<='9'; j++) y=y*10+s[j]-'0';
g[x].push_back(y);
g[y].push_back(x);
}
v[1]=1;
sol=1;
bfs(1);
printf("%lld",sol);
}