Cod sursa(job #479393)

Utilizator mihai_floreaFlorea Mihai Alexandru mihai_florea Data 23 august 2010 21:02:46
Problema Colorare3 Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 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,int k)
{
	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,K-1))%MOD;
		}
	ret=(ret*aranj[K-k][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");
	fout<<doit(1,0,K)<<"\n";

	return 0;
}