Cod sursa(job #3158443)

Utilizator xxUnrealUxxNiculae Adrian-Ioan xxUnrealUxx Data 18 octombrie 2023 18:57:01
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda HLO 2023 - Cls 11-12 - Tema 0 Marime 1.09 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

ifstream cin("cerere.in");
ofstream cout("cerere.out");

int r = 0;
vector<int> mat[100001];
vector<int> v;
int N;

bool p[100001];
int K[100001];
int S[100001];
int G[100001];
int viz[100001];

void dfs(int c)
{
    for(int it : mat[c])
    {
        if(viz[it] == 0)
        {
            viz[it] = 1;
            v.push_back(it);

            if(K[it] > 0)
            {
                S[it] = v[v.size() - K[it]-1];
                G[it] = G[S[it]] + 1;
            }

            dfs(it);
            v.pop_back();
        }
    }
}


int main()
{
    cin >> N;
    for(int i = 1; i<=N; i++)
        cin >> K[i];

    int a, b;
    while(cin >> a >> b)
    {
        mat[a].push_back(b);
        p[b] = 1;
    }

    for(int i = 1; i<=N; i++)
        if(p[i] == 0)
        {
            r = i;
            break;
        }


    viz[r] = 1;
    v.push_back(r);
    dfs(r);

    for(int i = 1; i<=N; i++)
    {
        cout << G[i] << ' ';
    }


}