Cod sursa(job #466502)

Utilizator tranbachhaiTran Bach Hai tranbachhai Data 26 iunie 2010 20:01:05
Problema Colorare3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#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);
*/
int n,k,t1,t2,v[NMAX];
long long rez=1;
int main()
{int i,j;
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];++v[t2];
}
rez=k;
for (i=1;i<=n;++i)
	for (j=1;j<v[i];++j)
		rez=(long long)(rez*(k-j))%p;
	
printf("%lld",rez);		
	
return 0;
}