Cod sursa(job #1053560)

Utilizator rares96cheseliRares Cheseli rares96cheseli Data 12 decembrie 2013 20:22:11
Problema Cerere Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 0.7 kb
#include <fstream>
#include <vector>
#define N 100005
using namespace std;

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

vector < int > v[N];
int n, k[N], sol[N], vf, x, y, st[N];
bool viz[N];

void dfs(int nod)
{
    st[++vf]=nod;
    if (k[nod])
        sol[nod]=sol[st[vf-k[nod]]]+1;
    for (int i=0; i<v[nod].size(); i++)
        dfs(v[nod][i]);
    vf--;
}

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

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

    for (int i=1; i<=n; i++)
        if (viz[i]==0) dfs(i), i=n;

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