Cod sursa(job #1723197)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 29 iunie 2016 23:52:07
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<cstdio>
#include<vector>
#define MAXN 100010
using namespace std;
vector<int> g[MAXN];
int ancestor[MAXN],answer[MAXN],Stack[MAXN],notRoot[MAXN],top=0;
void DFS(int node){
    int i;
    Stack[top]=node;
    top++;
    if(ancestor[node]==0)
        answer[node]=0;
    else
        answer[node]=1+answer[Stack[top-ancestor[node]-1]];
    for(i=0;i<g[node].size();i++)
        DFS(g[node][i]);
    top--;
}
int main(){
    freopen("cerere.in","r",stdin);
    freopen("cerere.out","w",stdout);
    int n,i,a,b;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&ancestor[i]);
    for(i=1;i<n;i++){
        scanf("%d%d",&a,&b);
        notRoot[b]=1;
        g[a].push_back(b);
    }
    for(i=1;i<=n;i++)
        if(notRoot[i]==0)
            DFS(i);
    for(i=1;i<=n;i++)
        printf("%d ",answer[i]);
    return 0;
}