Cod sursa(job #3304717)

Utilizator vlad7654vladimir manescu vlad7654 Data 26 iulie 2025 12:20:33
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int NMAX=100000;
vector<int> monkey(NMAX+5), walk, ans(NMAX+5, -1);
vector<bool> used(NMAX+5);
vector<int> muchii[NMAX+5];
void dfs(int node, int nivel){
    used[node]=1;
    walk.push_back(node);
    ans[node]=1+ans[walk[nivel-monkey[node]]];
    for(auto it:muchii[node]){
        if(used[it]==0){
            dfs(it, nivel+1);
        }
    }
    walk.resize(walk.size()-1);
}
int main(){
    int n, radacina=0;
    fin>>n;
    for(int i=1;i<=n;i++){
        fin>>monkey[i];
        radacina^=i;
    }
    for(int i=1;i<=n-1;i++){
        int a, b;
        fin>>a>>b;
        muchii[a].push_back(b);
        muchii[b].push_back(a);
        radacina^=b;
    }
    dfs(radacina,0);
    for(int i=1;i<=n;i++){
        fout<<ans[i]<<' ';
    }

}