Cod sursa(job #466115)

Utilizator mihai995mihai995 mihai995 Data 26 iunie 2010 10:27:13
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;

struct list{int x,y;};
list c[1<<17];
int v[1<<17],f[1<<17],n,k;
bool fix[1<<17];
const int mod=1000000007;

ifstream in("colorare3.in");
ofstream out ("colorare3.out");

long long a(int n,int k)
{
	int s=1;
	for (int i=n-k+1;i<=n;i++)
		s=(s*i)%mod;
	return s;
}

bool cmp(int a,int b)
{
	return a>b;
}

int main()
{
	long long sol;
	int x,i;
	in>>n>>k;
	for (i=1;i<n;i++)
	{
		in>>c[i].x>>c[i].y;
		f[c[i].x]++;
		f[c[i].y]++;
	}
	x=1;
	for (i=2;i<=n;i++)
		if (f[x]<f[i])
			x=i;
	fix[x]=true;
	for (i=1;i<n;i++)
	{
		if (fix[c[i].x])
		{
			v[c[i].x]++;
			continue;
		}
		if (fix[c[i].y])
		{
			v[c[i].y]++;
			continue;
		}
		fix[c[i].x]=true;
		v[c[i].x]=1;
	}
	sort(v+1,v+n+1,cmp);
	sol=a(k,v[1]);k--;
	for (i=2;v[i];i++)
		sol=(sol*a(k,v[i]))%mod;
	out<<sol<<"\n";
	return 0;
}