Cod sursa(job #466208)

Utilizator ChallengeMurtaza Alexandru Challenge Data 26 iunie 2010 12:13:06
Problema Colorare3 Scor 70
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 2 Marime 1.24 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

const char InFile[]="colorare3.in";
const char OutFile[]="colorare3.out";
const int MaxN=100010;
const unsigned long long MOD=1000000007;

vector<int> a[MaxN];
int viz[MaxN];
int nrViz[MaxN];
unsigned long long c[MaxN];
ifstream fin(InFile);
ofstream fout(OutFile);

unsigned long long C=1;
int N,K,x,y;

void bfs(int nod)
{
    queue<int> q;
    q.push(nod);
    viz[nod]=1;
    while(!q.empty())
    {
        nod=q.front();
        q.pop();
        for(register int i=0;i<a[nod].size();++i)
        {
            if(viz[a[nod][i]]==0)
            {
                q.push(a[nod][i]);
                viz[a[nod][i]]=1;
                ++nrViz[a[nod][i]];
                c[nod]*=(K-nrViz[nod]);
                c[nod]%=MOD;
                ++nrViz[nod];
            }
        }
    }
}

int main()
{
    fin>>N>>K;
    for(register int i=1;i<N;++i)
    {
        fin>>x>>y;
        a[x].push_back(y);
        a[y].push_back(x);
        c[i]=1;
    }
    c[N]=1;
    fin.close();

    bfs(1);
    for(register int i=1;i<=N;++i)
    {
        C*=c[i];
        C%=MOD;
    }

    fout<<C;
    fout.close();
    return 0;
}