Cod sursa(job #1942312)

Utilizator GeorginskyGeorge Georginsky Data 27 martie 2017 21:49:39
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.56 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];

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;
    for(int i=1; i<=n; i++)in>>c[i];
    for(int i=1; i<n; i++)in>>x>>y,v[x].pb(y);
    dfs(1);
    for(int i=1; i<=n; i++)out<<r[i]<<" ";
    return 0;
}