Cod sursa(job #3341390)

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

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

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

void citire(){
    fin>>n;
    memset(ans,-1,sizeof(ans));
    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;
        are_tata[j]=1;
    }

    for(int i=1;i<=n;i++){
        if(are_tata[i]==0){ startul=i; break;}
    }
}

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;
        if(ans[nod_curent]!=0)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);
    citire();
    stiva[++top]=startul;
    dfs(startul);
    for(int i=1;i<=n;i++){
        fout<<ans[i]<<" ";
    }
    return 0;
}