Cod sursa(job #3289369)

Utilizator stanciuvalentinStanciu-Tivlea Valentin Gabriel stanciuvalentin Data 26 martie 2025 17:18:16
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("cerere.in");
ofstream g("cerere.out");

int n,x,y,rad,k[100200],nivel[100200],obiect[100200],maimute[100200],ap[100200];
vector <int> edges[100200];

void dfs(int x)
{
    obiect[nivel[x]]=x;
    maimute[x]=maimute[obiect[nivel[x]-k[x]]]+1;
    for(auto y:edges[x])
        if(nivel[y]==0)
            nivel[y]=nivel[x]+1, dfs(y);
}

int main()
{
    f>>n;
    for(int i=1; i<=n; i++)
        f>>k[i];
    for(int i=1; i<=n; i++)
        f>>x>>y, edges[x].push_back(y), ap[y]=1;
    for(int i=1; i<=n; i++)
        if(ap[i]==0)
            {rad=i; break;}
    nivel[rad]=1, dfs(rad);
    for(int i=1; i<=n; i++)
        g<<maimute[i]-1<<' ';
    return 0;
}