Cod sursa(job #479398)

Utilizator mihai_floreaFlorea Mihai Alexandru mihai_florea Data 23 august 2010 21:09:52
Problema Colorare3 Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <vector>
#include <fstream>
using namespace std;

const int MOD=1000000007;
const int NMAX=100001;

typedef long long i64;

int N,K;
i64 aranj[2][NMAX];
vector<int> G[NMAX];

i64 doit(int x,int dad)
{
	i64 ret=1;
	int nr=0;
	for (vector<int>::iterator it=G[x].begin();it!=G[x].end();++it)
		if (*it != dad)
		{
			++nr;
			ret=(ret*doit(*it,x))%MOD;
		}
	ret=(ret*aranj[1][nr])%MOD;
	return ret;
}


int main()
{
	int i,j,k;
	ifstream fin("colorare3.in");
	fin>>N>>K;
	for (k=1;k<=N-1;++k)
	{
		fin>>i>>j;
		G[i].push_back(j);
		G[j].push_back(i);
	}

	for (k=0;k<2;++k)
	{
		int n=K-k;
		aranj[k][0]=1;
		for (i=1;i<=N-1 && i<=n;++i)
			aranj[k][i]=(aranj[k][i-1]*(n-i+1))%MOD;
	}

	ofstream fout("colorare3.out");
	i64 sol=1;
	for (vector<int>::iterator it=G[1].begin();it!=G[1].end();++it)
		sol=(sol*doit(*it,1))%MOD;
	sol=(sol*aranj[0][G[1].size()])%MOD;
	fout<<sol<<"\n";

	return 0;
}