Cod sursa(job #466364)

Utilizator mihai995mihai995 mihai995 Data 26 iunie 2010 13:17:04
Problema Colorare3 Scor 10
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 2 Marime 0.87 kb
#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;
}