Cod sursa(job #467627)

Utilizator dicu_dariaDaria Dicu dicu_daria Data 29 iunie 2010 18:13:43
Problema Colorare3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#include <cstring>
using namespace std;
typedef struct{
int val,tata;
} arbore;
int x,y,sol,n,k,t,i,fact[100002],fii[100001],f[100001];
arbore nod[100001],v;

int main()
{
    ifstream fi("colorare3.in");
    ofstream fo("colorare3.out");
    memset(nod,0,sizeof(nod));
    fi>>n>>k;

    fact[n]=k%1000000007;;
    fact[n-1]=k*(k-1)%1000000007;
    f[n]=(k-1)%1000000007;;
    for(i=k-2;i>=k-n+1 and i>=1;i--)
    {
        fact[i-k+n]=(fact[i+1-k+n]*i)%1000000007;
        f[i-k+n]=(f[i+1-k+n]*i)%1000000007;

    }

    nod[n].val=n;
    for(i=1;i<=n-1;i++)
    {
        nod[i].val=i;
        fi>>x>>y;
        if(nod[y].tata==0) {nod[y].tata=x; fii[x]++; } else {nod[x].tata=y; fii[y]++; }
    }
    sol=1;
    for(i=1;i<=n;i++)
    {
        v=nod[i];
        if(fii[v.val]!=0)
                if(v.tata!=0)
                sol*=f[k-fii[v.val]-k+n+1]%1000000007;
                else
                sol*=fact[k-fii[v.val]-k+n+1]%1000000007;
    }

    fo<<sol%1000000007<<"\n";
    fo.close();
    return 0;
}