Cod sursa(job #2623639)

Utilizator mariamirabella2Bucur-Sabau Maria-Mirabela mariamirabella2 Data 3 iunie 2020 15:27:58
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream cin("cerere.in");
ofstream cout("cerere.out");

vector<int>v[100005];
int viz[100005],tata[100005],g[100005],t[100005],n,x,y,ans[100005];

void dfs(int nod, int nr){
    viz[nod]=1;
    g[++nr]=nod;
    if(t[nod]!=0){
        ans[nod]=ans[g[nr-t[nod]]]+1;
    }
    for(auto x:v[nod]){
        if(!viz[x]){
            dfs(x,nr);
        }
    }
    nr--;
}

int main()
{
    int nod;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>t[i];
    }
    for(int i=1;i<n;i++){
        cin>>x>>y;
        v[x].push_back(y);
        tata[y]=x;
    }
    for(int i=1;i<=n;i++){
        if(!tata[i]){
            nod=i;
            break;
        }
    }
    dfs(nod,0);
    for(int i=1;i<=n;i++){
        cout<<ans[i]<<" ";
    }
    return 0;
}