Cod sursa(job #466535)

Utilizator bogdan2412Bogdan-Cristian Tataroiu bogdan2412 Data 26 iunie 2010 22:22:26
Problema Colorare3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#include <cassert>
#include <algorithm>

using namespace std;

#define MAXN 100000
#define MAXK 1000000000
#define MOD 1000000007
#define LL long long

int N, K, deg[MAXN];

int main() {
    freopen("colorare3.in", "rt", stdin);
#ifndef DEBUG
    freopen("colorare3.out", "wt", stdout);
#endif

    assert(scanf("%d %d", &N, &K) == 2);
    assert(1 <= N && N <= MAXN);
    assert(1 <= K && K <= MAXK);
    for (int i = 1; i < N; i++) {
        int x, y;
        assert(scanf("%d %d", &x, &y) == 2);
        assert(1 <= x && x <= N && 1 <= y && y <= N && x != y);
        deg[x] += 1;
        deg[y] += 1;
    }

    for (int i = 1; i <= N; i++) {
        assert(deg[i] <= K);
        if (i != 1) {
            deg[i] -= 1;
        }
    }

    LL rez = 1;
    for (int i = 1; i <= N; i++) {
        for (int j = K - (i != 1); j > K - (i != 1) - deg[i]; j--) {
            rez = (rez * j) % MOD;
        }
    }
    printf("%lld\n", rez);

    return 0;
}