Cod sursa(job #2980596)

Utilizator SerbanCaroleSerban Carole SerbanCarole Data 16 februarie 2023 17:53:46
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <vector>
using namespace std;

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

const int MAX = 1e5 + 1;

vector <int> g[MAX];

int path[MAX] , s[MAX] , gr[MAX] , n , x , y , kp , dp[MAX];

void dfs( int x ){

    path[++kp] = x;

    if(s[x]){

        dp[x] = dp[path[kp-s[x]]] + 1;
    }

    for(auto it : g[x]){

        dfs(it);
    }

    --kp;
}

int main(){

    cin >> n;

    for(int i = 1 ; i <= n ; i++){

        cin >> s[i];
    }

    for(int i = 1 ; i < n ; i++){

        cin >> x >> y;

        g[x].push_back(y);

        gr[y]++;

    }

    int r;

    for(int i = 1 ; i <= n ; i++){

        if(!gr[i]){

            r = i;
            break;
        }
    }

    dfs(r);

    for(int i = 1 ; i <= n ; i++){

        cout << dp[i] << ' ';
    }

    return 0;
}