Cod sursa(job #941025)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 17 aprilie 2013 19:26:36
Problema Colorare3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>

using namespace std;

const int MAX_N = 100005;
const int Mod = 1000000007;

int N, K, Degree[MAX_N], A[MAX_N], Solution;

void Preprocess() {
    A[0] = 1;
    for (int i = 1; i <= N; ++i)
        A[i] = (1LL * A[i - 1] * (K - i)) % Mod;
}

void Solve() {
    Preprocess();
    Solution = 1;
    if (Degree[1] > K) {
        Solution = 0;
    } else {
        for (int i = K - Degree[1] + 1; i <= K; ++i)
            Solution = (1LL * Solution * i) % Mod;
    }
    for (int i = 2; i <= N; ++i) {
        if (Degree[i] > K)
            Solution = 0;
        else
            Solution = (1LL * Solution * A[Degree[i] - (i != 1 ? 1 : 0)]) % Mod;
    }
}

void Read() {
    ifstream in("colorare3.in");
    in >> N >> K;
    for (int i = 1; i < N; ++i) {
        int x, y; in >> x >> y;
        ++Degree[x]; ++Degree[y];
    }
    in.close();
}

void Print() {
    ofstream out("colorare3.out");
    out << Solution << "\n";
    out.close();
}

int main() {
    Read();
    Solve();
    Print();
    return 0;
}