Cod sursa(job #2841596)

Utilizator vreaulaoxfordMihai Anghel vreaulaoxford Data 29 ianuarie 2022 22:35:49
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,str[100005],i,a,b,start,mark[100005],ni[100005];
short int ap[100005];
vector <int> v[100005];

void DFS(int start, int nivel){
    ni[nivel] = start;
    for(int i=0;i<v[start].size();i++){
        if(str[v[start][i]]){
        mark[v[start][i]] = mark[ni[nivel-str[v[start][i]]+1]] + 1;
        }
        DFS(v[start][i],nivel + 1);
    }
}



int main()
{
fin>>n;
for(i=1;i<=n;i++){
    fin>>str[i];
}
for(i=1;i<=n-1;i++){
    fin>>a>>b;
    v[a].push_back(b);
    ap[b] = 1;
}
for(i=1;i<=n;i++){
    if(!ap[i]){
        start = i;
        break;
    }
}
DFS(start,1);
for(i=1;i<=n;i++){
    fout << mark[i] << " ";
}
    return 0;
}