Cod sursa(job #3254561)

Utilizator Sasha_12454Eric Paturan Sasha_12454 Data 7 noiembrie 2024 20:51:17
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>
using namespace std;

int n;
int pasi[100005], stramosi[100005], ans[100005];
bool rad[100005];
vector <int> v[100005];

void dfs(int x, int adnc)
{
    stramosi[adnc]=x;
    for(int y:v[x]){
        if(pasi[y]==0){
            ans[y]=0;
            dfs(y, adnc+1);
        }
        else{
            ans[y]=ans[stramosi[adnc-pasi[y]+1]]+1;
            dfs(y, adnc+1);
        }
    }
}
int main(){
    cin >> n;
    for(int i = 1; i <= n; ++i){
        cin >> pasi[i];
    }
    for(int i = 1; i <= n-1; ++i){
        int parinte, fiu;
        cin >> parinte >> fiu;
        rad[fiu] = true;
        v[parinte].push_back(fiu);
    }
    for(int i = 1; i <= n; ++i){
        if(!rad[i]){
            ans[i] = 0;
            stramosi[0]=i;
            dfs(i, 0);
        }
    }
    for(int i = 1; i <= n; ++i){
        cout << ans[i] << " ";
    }
    return 0;
}