Cod sursa(job #467437)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 28 iunie 2010 21:36:00
Problema Colorare3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>

using namespace std;

#define file_in "colorare3.in"
#define file_out "colorare3.out"

#define nmax 111111

int n,k;
int grad[nmax];
long long sol;

void citire()
{
    freopen(file_in,"r",stdin);
    freopen(file_out,"w",stdout);

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

}

#define mod 1000000007

long long aranj(int y, int x)
{
    int i;
    long long res=1;

    for (i=y;i>y-x;--i)
         res=(res*i)%mod;
     return res;

}

void solve()
{
    int i;
    sol=1;
    for (i=1;i<=n;++i)
         if (i!=1)
        // printf("%d %d\n", grad[i]-1,k-1);
             sol=(sol*aranj(k-1,grad[i]-1))%mod;
             //printf("%d\n",aranj(k-1,grad[i]-1));
         else
         //printf("%d %d\n", grad[i],k);
             sol=(sol*aranj(k,grad[i]))%mod;
             //printf("%d\n", aranj(k,grad[i]));
    printf("%lld", sol);
}

int main()
{
    citire();
    solve();

    fclose(stdin);
    fclose(stdout);

    return 0;
}