Cod sursa(job #484522)

Utilizator ProtomanAndrei Purice Protoman Data 14 septembrie 2010 18:04:05
Problema Colorare3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <algorithm>
#include <stdio.h>

#define restRez 1000000007
#define MAX 100010
#define ll long long

using namespace std;

int n, k;
ll aranj1[MAX], aranj2[MAX];
int g[MAX];

int main()
{
	freopen("colorare3.in", "r", stdin);
	freopen("colorare3.out", "w", stdout);

	scanf("%d %d", &n, &k);

	aranj1[0] = aranj2[0] = 1;
	for (int i = k; i > max(0, k - n); i--)
	{
		aranj1[k - i + 1] = (aranj1[k - i] * i) % restRez;
		aranj2[k - i + 1] = (aranj2[k - i] * (i - 1)) % restRez;
	}

	for (int i = 1; i < n; i++)
	{
		int n1, n2;
		scanf("%d %d", &n1, &n2);

		g[n1]++;
		g[n2]++;
	}

	ll sol = aranj1[g[1]];
	for (int i = 2; i <= n; i++)
		sol = (sol * aranj2[g[i] - 1]) % restRez;

	printf("%lld\n", sol);

	fclose(stdin);
	fclose(stdout);
	return 0;
}