Cod sursa(job #862693)

Utilizator SpiriFlaviuBerbecariu Flaviu SpiriFlaviu Data 22 ianuarie 2013 20:52:51
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>

using namespace std;

ifstream fin("cerere.in");
ofstream fout("cerere.out");

int n,m,x,y;
int intreaba[100001],sol[100001],t[100001];
bool calculat[100001];

void calculeaza(int maimuta)
{
    if(intreaba[maimuta]==0)
        sol[maimuta] = 0;
    else
    {
        int tata = maimuta;
        for(int i=1;i<=intreaba[maimuta];i++)
            tata = t[tata];

            if(!calculat[tata])
                calculeaza(tata);
            sol[maimuta] = 1 + sol[tata];

    }
    calculat[maimuta] = true;

}

int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>intreaba[i];
    }
    for(int i=1;i<n;i++)
    {
        fin>>x>>y;
        t[y] = x;
    }
    for(int i=1;i<=n;i++)
    {
        if(!calculat[i])
            calculeaza(i);
        fout<<sol[i]<<' ';
    }



    fin.close();
    fout.close();

    return 0;
}