Cod sursa(job #465454)

Utilizator wefgefAndrei Grigorean wefgef Data 24 iunie 2010 12:31:20
Problema Colorare3 Scor Ascuns
Compilator cpp Status done
Runda Marime 0.86 kb
#include <cassert>
#include <cstdio>
#include <vector>
using namespace std;

const int MAX_N = 100005;
const long long MOD = 1000000007;

int n, k;
char buf[16];
bool vis[MAX_N];
vector<int> g[MAX_N];
long long sol = 1;

void df(int node) {
    vis[node] = true;

    for (int i = (node == 1 ? 0 : 1); i < (int)g[node].size(); ++i)
        sol = sol * (k - i) % MOD;

    for (int i = 0; i < (int)g[node].size(); ++i)
        if (!vis[g[node][i]])
            df(g[node][i]);
}

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

    assert(scanf("%d %d\n", &n, &k));
    for (int i = 1; i < n; ++i) {
        assert(fgets(buf, 16, stdin));
        int a, b;
        sscanf(buf, "%d %d", &a, &b);

        g[a].push_back(b);
        g[b].push_back(a);
    }
    df(1);
    printf("%lld\n", sol);
}