Cod sursa(job #3361985)

Utilizator RobertIon013Ion Robert Andrei RobertIon013 Data 31 iulie 2026 12:09:15
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin ("cerere.in");
ofstream fout ("cerere.out");
vector<vector<int>> c(100001);
vector <int> t(100001),v(100001);
int rez[100001],g[100001],s[100001];
int nr,a,b,n,cnt=1,cnt2;
void dfs(int nod)
{
    cnt2++;
    s[nod]=1;
    v[cnt2]=nod;
    if(g[nod]!=0&&g[nod]<=cnt2)rez[nod]=rez[v[cnt2-g[nod]]]+1;
    for(int i=0;i<c[nod].size();i++)
    {
        if(s[c[nod][i]]==0)dfs(c[nod][i]);
    }
    cnt2--;
}
int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)fin>>g[i];
    for(int i=1;i<=n;i++)
    {
        fin>>a>>b;
        c[a].push_back(b);
        t[b]=1;
    }
    while(t[cnt]==1)cnt++;
    dfs(cnt);
    for(int i=1;i<=n;i++)
    {
        fout<<rez[i]<<" ";
    }

    return 0;
}