Cod sursa(job #2438761)

Utilizator CharacterMeCharacter Me CharacterMe Data 13 iulie 2019 18:16:40
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int n, i, j, k_list[100005], g_list[100005];
vector<int> graph[100005], list;
bool check[100005];
void dfs(int node);
int main()
{
    freopen("cerere.in", "r", stdin);
    freopen("cerere.out", "w", stdout);
    scanf("%d", &n);
    for(i=1; i<=n; ++i) {scanf("%d", &k_list[i]); g_list[i]=-1;}
    for(i=2; i<=n; ++i) {
        int x, y;
        scanf("%d%d", &x, &y);
        graph[x].push_back(y);
        check[y]=true;
    }
    for(i=1; i<=n; ++i) if(check[i]==false) {dfs(i); break;}
    for(i=1; i<=n; ++i) printf("%d ", g_list[i]);
    return 0;
}
void dfs(int node){
    list.push_back(node);
    g_list[node]=g_list[list[list.size()-1-k_list[node]]]+1;
    for(auto j:graph[node]) dfs(j);
    list.pop_back();
    return;
}