Cod sursa(job #1787662)

Utilizator saba_alexSabadus Alex saba_alex Data 24 octombrie 2016 21:25:33
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("cerere.in");
ofstream fout("cerere.out");

vector <int> G[100005],str;

int K[100005], rez[100005], n, x, y, i;
bool fr[100005];


void dfs(int nod){
    if(K[nod]){
        rez[nod]=1+rez[str[y-K[nod]]];
    }
    for(auto it: G[nod]){
        str.push_back(it);
        y++;
        dfs(it);
        str.pop_back();
        y--;
    }
}

int main()
{
    fin>>n;
    for(i=1; i<=n; ++i)
        fin>>K[i];
    for(int i=1; i<=n-1; ++i){
        fin>>x>>y;
        G[x].push_back(y);
        fr[y]=1;
    }
    x=-1;
    for(i=1; i<=n && x==-1; ++i)
        if(fr[i]==0)
            x=i;
    str.push_back(x);
    y=0;
    dfs(x);
    for(i=1; i<=n; ++i)
        fout<<rez[i]<<' ';
    return 0;
}