Cod sursa(job #2663499)

Utilizator mjmilan11Mujdar Milan mjmilan11 Data 26 octombrie 2020 16:23:01
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int NMAX = 100005;
bool ver[NMAX],p[NMAX];
int rasp[NMAX],a[NMAX],n,x,y,nod=1;
vector <int> v[NMAX],st;
void dfs(int node){
    ver[node]=true;
    st.push_back(node);
    if(a[node]==0) rasp[node]=0;
    else           rasp[node]=rasp[st[st.size()-1-a[node]]]+1;
    for(int i=0;i<v[node].size();i++){
        int vecin=v[node][i];
        if(ver[vecin]==false){
            dfs(vecin);
        }
    }
    st.pop_back();
}
int main()
{
    fin >> n;
    for(int i=1;i<=n;i++) fin >> a[i];
    for(int i=1;i<n;i++){
        fin >> x >> y;
        v[x].push_back(y);
        v[y].push_back(x);
        p[y]=true;
    }
    for(int i=1;i<=n;i++){
        if(p[i]==false){
            nod=i;
        break;}
    }
    dfs(nod);
    for(int i=1;i<=n;i++){
        fout << rasp[i] << ' ';
    }
    return 0;
}