Cod sursa(job #3199931)

Utilizator robert_dumitruDumitru Robert Ionut robert_dumitru Data 2 februarie 2024 21:12:41
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <bits/stdc++.h>
using namespace std;

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

int n, Root;
bitset<100005> viz;
int a[100005], d[100005];
int st[100005], top;
vector<int> L[100005];

void DFS(int k)
{
    st[++top] = k;
    if (a[k] != 0)
        d[k] = 1 + d[st[top - a[k]]];
    for (int i : L[k])  
        DFS(i);
    top--;
}

int main()
{
    int i, j, k;
    fin >> n;
    for (i = 1; i <= n; i++)
        fin >> a[i];
    for (k = 1; k < n; k++)
    {
        fin >> i >> j;
        L[i].push_back(j);
        viz[j] = 1;
    }
    for (i = 1; i <= n; i++)
        if (viz[i] == 0)
            Root = i;
            
    DFS(Root);
    for (i = 1; i <= n; i++)
        fout << d[i] << " ";
}