Cod sursa(job #2023319)

Utilizator antanaAntonia Boca antana Data 18 septembrie 2017 18:53:33
Problema Colorare3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e5 + 5;
const int MOD = 1e9 + 7;

FILE *fin, *fout;

vector < int > G[MAXN];

int k, n, ans = 1, grd[MAXN];

inline int arrangements(int right, int left) {
    int res = 1;
    if (left == 0)
        return 1LL;
    for (int i = right; i > right - left; i--)
        res = (1LL * res * i) % MOD;
    return res;
}

int main()
{
    fin = fopen( "colorare3.in", "r" );
    fout= fopen( "colorare3.out","w" );

    int x, y;

    fscanf( fin, "%d%d", &n, &k );

    for (int i = 1; i < n; i++) {
        fscanf( fin, "%d%d", &x, &y );
        grd[ x ]++;
        grd[ y ]++;
    }

    for (int i = 1; i < n; i++) {
        bool dad = 1;
        if (i == 1)
            dad = 0;
        grd[ i ] -= dad;
        ans = (1LL * ans * arrangements(k - dad, grd[ i ])) % MOD;
    }

    fprintf( fout, "%d", ans );

    fclose( fin );
    fclose( fout );

    return 0;
}