Cod sursa(job #1689772)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 14 aprilie 2016 16:01:59
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <bits/stdc++.h>

#define NMax 100005
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");

int n,x,y,top;
int rez[NMax],viz[NMax],tata[NMax],s[NMax],b[NMax];
vector<int> G[NMax];

void dfs(int nod,int tata){
    s[++top] = nod;
    viz[nod] = viz[s[top - b[nod]]] + 1;

    for(int i = 0; i < G[nod].size(); ++i){
        if(!viz[G[nod][i]]){
            dfs(G[nod][i],nod);
        }
    }
    s[top] = 0;
    --top;
}
int main()
{
    f >> n;
    for(int i = 1; i <= n; ++i){
        f >> b[i];
    }
    for(int i = 1; i < n; ++i){
        f >> x >> y;
        tata[y] = x;
        G[x].push_back(y);
    }
    int root = 1;
    while(tata[root])
        root = tata[root];
    dfs(root,0);
    for(int i = 1; i <= n; ++i){
        g << viz[i] - 1 << ' ';
    }
    return 0;
}