Cod sursa(job #466157)

Utilizator dicu_dariaDaria Dicu dicu_daria Data 26 iunie 2010 11:37:53
Problema Colorare3 Scor 10
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 2 Marime 1.14 kb
#include <fstream>
#include <cstring>
using namespace std;
typedef struct{
int val,tata;
} arbore;
arbore nod[100001],v;
int comb(int n,int k)
{
    int nkf,kf,nf,i,prod;
    nkf=0; prod=1; kf=0; nf=0;
    if(k>n) return 0;
    if(k==n) return 1;
    for(i=1;i<=n;i++)
    {
        prod=(prod*i)%1000000007;
        if(i==n-k) nkf=prod;
        if(i==k) kf=prod;
    }
    nf=prod;
    return (nf/(nkf*kf))%1000000007;
}
int factorial(int n)
{
    int i,prod=1;
    for(i=1;i<=n;i++) prod=(prod*i)%1000000007;
    return prod%1000000007;
}
int main()
{
    int sol,t,i,n,x,k,y,fii[100001];
    ifstream fi("colorare3.in");
    ofstream fo("colorare3.out");
    memset(nod,0,sizeof(nod));
    fi>>n>>k;
    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) t=1; else t=0;
        sol*=factorial(fii[v.val])*comb(k-t,fii[v.val])%1000000007;
        }
    }
    fo<<sol%1000000007<<"\n";
    fo.close();
    return 0;
}