Cod sursa(job #3259700)

Utilizator mariusharabariMarius Harabari mariusharabari Data 27 noiembrie 2024 16:02:30
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <bits/stdc++.h>
using namespace std;

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

bitset <100001> viz, not_root;
int ancest[100001], n, x, y, i;
vector <int> a[100001], st, r(100001, -1);

void dfs(int v, int h){
    st.push_back(v);
    viz[v]=1;
    r[v]=1+r[st[h-ancest[v]]];
    //cout<<v<<' '<<r[v]<<endl;
    for(int i:a[v]){
        if(!viz[i]) dfs(i, h+1);
    }
    st.resize(st.size()-1);
}

int main(){
    fin>>n;
    for(i=1;i<=n;i++) fin>>ancest[i];
    for(i=1;i<n;i++){
        fin>>x>>y;
        not_root[y]=1;
        a[x].push_back(y);
        a[y].push_back(x);
    }
    for(i=1;i<=n;i++){
        if(!not_root[i])
            dfs(i, 0);
    }
    for(i=1;i<=n;i++){
        fout<<r[i]<<' ';
    }
}