Cod sursa(job #3341374)

Utilizator Dascalu_LucaDascalu Luca Petru Dascalu_Luca Data 19 februarie 2026 12:14:06
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>
using namespace std;

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

int n,K[100005],ans[100005];
bool are_fii[100005];
vector<int> tata[100005];

void citire(){
    fin>>n;
    for(int i=1;i<=n;i++){
        fin>>K[i];
    }
    int i,j;
    while(fin>>i>>j){
        tata[i].push_back(j);
        are_fii[i]=1;
    }
}

int stiva[100005],top=0;

//ans[i]=1+ans[top-K[i]]

void dfs(int start){
    if(K[start]==0){
        ans[start]=0;
    }
    if(!are_fii[start]) return;
    for(int i=0;i<tata[start].size();i++){
        int nod_curent=tata[start][i];
        stiva[++top]=nod_curent;
        ans[nod_curent]=1+ans[stiva[top-K[nod_curent]]];
        dfs(nod_curent);
        top--;
    }

}

int main()
{
    ios_base::sync_with_stdio(false);
    fin.tie(NULL);
    //memset(ans, -1, sizeof(ans));
    citire();
    stiva[++top]=1;
    dfs(1);
    for(int i=1;i<=n;i++){
        fout<<ans[i]<<" ";
    }
    return 0;
}