Cod sursa(job #633280)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 13 noiembrie 2011 14:40:36
Problema Cerere Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <fstream>
#include <vector>
using namespace std;

int n,k[100100],X,Y,rad,ap[100100],sol[100100];
vector<int> A[100100];

void DFs(int nod,int niv)
{
    ap[niv]=nod;
    if(k[nod]==0)
        sol[nod]=0;
    else
        sol[nod] = sol[ap[niv-k[nod]]]+1;
    for(vector<int>::iterator it=A[nod].begin();it!=A[nod].end();++it)
        DFs(*it,niv+1);
}
int main()
{
    ifstream f("cerere.in");
    ofstream g("cerere.out");

    f>>n;
    for(int i=1;i<=n;++i)
        f>>k[i];

    rad=(n*(n+1))>>1;
    for(int i=1;i<n;++i)
    {
        f>>X>>Y;
        A[X].push_back(Y);
        rad-=Y;
    }

    DFs(rad,1);

    for(int i=1;i<=n;++i)
        g<<sol[i]<<' ';

    g.close();
    return 0;
}