Cod sursa(job #1942325)

Utilizator GeorginskyGeorge Georginsky Data 27 martie 2017 22:01:08
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <iostream>
#include <fstream>
#include <vector>
#define N 100005
#define pb push_back
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
vector<int> v[N], s;
int n, c[N], r[N], t[N];

void dfs(int x){
    if(c[x]>0)r[x]=1+r[s[s.size()-c[x]]];
    s.pb(x);
    for(int i=0; i<v[x].size(); i++)dfs(v[x][i]);
    s.pop_back();
}

int main(){
    in>>n;
    int x, y, root;
    for(int i=1; i<=n; i++)in>>c[i];
    for(int i=1; i<n; i++)in>>x>>y,v[x].pb(y),t[y]=x;
    for(int i=1; i<=n; i++){
        if(!t[i]){
            root=i;
            break;
        }
    }
    dfs(root);
    for(int i=1; i<=n; i++)out<<r[i]<<" ";
    return 0;
}