Pagini recente » Cod sursa (job #1282536) | Cod sursa (job #218213) | Cod sursa (job #1741933) | Cod sursa (job #1593892) | Cod sursa (job #466498)
Cod sursa(job #466498)
#include<stdio.h>
#include<vector>
#define p 1000000007
#define NMAX 100010
using namespace std;
//dfs
vector<long> v[NMAX],v1[NMAX];
int n,k,tip[NMAX],viz[NMAX],a[NMAX],b[NMAX],cant[NMAX];
long long rez=1;
void dfs(int nod)
{
int i,s;
for (i=0;i<v[nod].size();++i)
if (tip[v1[nod][i]]==0)
{
s=cant[nod]+cant[v[nod][i]];
if (s>k) rez=0;
rez=(rez*(k-s))%p;
tip[v1[nod][i]]=1;
++cant[a[v1[nod][i]]];
++cant[b[v1[nod][i]]];
}
for (i=0;i<v[nod].size();++i)
if (!viz[v[nod][i]])
{
viz[v[nod][i]]=1;
dfs(v[nod][i]);
}
}
int main()
{
int i,t1,t2;
freopen("colorare3.in","r",stdin);
freopen("colorare3.out","w",stdout);
scanf("%d%d",&n,&k);
for (i=1;i<=n-1;++i)
{
scanf("%d%d",&t1,&t2);
v[t1].push_back(t2);
v1[t1].push_back(i);
v[t2].push_back(t1);
v1[t2].push_back(i);
a[i]=t1;
b[i]=t2;
}
viz[1]=1;
dfs(1);
printf("%lld",rez);
return 0;
}