Cod sursa(job #467915)

Utilizator savimSerban Andrei Stan savim Data 1 iulie 2010 12:30:04
Problema Colorare3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <stdio.h>

#define prim 1000000007
#define MAX_N 100010

int x, y, n, k;
int grad[MAX_N], v[MAX_N];
int start[MAX_N], stop[MAX_N];

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

	scanf("%d %d", &n, &k);
	for (int i = 1; i < n; i++) {
		scanf("%d %d", &x, &y);
		grad[x]++; grad[y]++;
	}

	start[n] = 1;
	stop[n - grad[1]] = -1;
	for (int i = 2; i <= n; i++) {
		grad[i]--;

		start[n - 1]++;
		stop[n - 1 - grad[i]]--;
	}

	int add = 0, val = k, sol = 1;
	for (int i = n; i > 0; i--) {
		add = add + start[i] + stop[i];

		for (int j = 1; j <= add; j++)
			sol = (1LL * sol * val) % prim;

		val--;
	}

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

	return 0;
}