Cod sursa(job #1094009)

Utilizator apopeid14Apopei Daniel apopeid14 Data 28 ianuarie 2014 20:27:03
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <vector>

const int NMAX = 100003;

using namespace std;

ifstream f("cerere.in");
ofstream g("cerere.out");

int n,k[NMAX],stiva[NMAX],x,y,top,rad,sol[NMAX],i,grad[NMAX];
vector <int> v[NMAX];

void parcurgere(int nod)
{
    int i;
    top++;
    stiva[top]=nod;
    sol[nod]=1+sol[stiva[top-k[nod]]];
    for (i=0;i<v[nod].size();i++)
        parcurgere(v[nod][i]);
    top--;
}

int main()
{
    f>>n;
    for (i=1;i<=n;i++)
    {
        f>>k[i];
    }
    for (i=1;i<=n-1;i++)
    {
        f>>x>>y;
        v[x].push_back(y);
        grad[y]++;
    }

    for (i=1;i<=n;i++)
    {
        if (grad[i]==0)
        {
            rad=i;
            break;
        }
    }

    parcurgere(rad);

    for (i=1;i<=n;i++)
    {
        g<<sol[i]-1<<" ";
    }

    f.close();
    g.close();
    return 0;

}