Cod sursa(job #2570417)

Utilizator yo_andrei_2003Murica Andrei yo_andrei_2003 Data 4 martie 2020 16:47:18
Problema Cerere Scor 85
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
vector<int> stiva;
vector<int> v[100005];
int ask[100005], gen[100005];
char ts[100005];
void dfs(int a) {
    stiva.push_back(a);
    ask[a]=stiva[stiva.size()-gen[a]-1];
    for (int i=0;i<v[a].size();i++) {
        dfs(v[a][i]);
    }
    stiva.pop_back();
}
int main()
{
    int i, n, a, b;
    FILE *fin, *fout;
    fin=fopen("cerere.in" ,"r");
    fout=fopen("cerere.out" ,"w");
    fscanf(fin, "%d" ,&n);
    for (i=1;i<=n;i++) {
        fscanf(fin, "%d" ,&gen[i]);
    }
    for (i=1;i<n;i++) {
        fscanf(fin, "%d%d" ,&a ,&b);
        v[a].push_back(b);
        ts[b]=1;
    }
    i=1;
    while (ts[i]==1) {i++;}
    dfs(i);
    for (i=1;i<=n;i++) {
        a=i;
        int cnt=0;
        while (ask[a]!=a) {
            cnt++;
            a=ask[a];
        }
        fprintf(fout, "%d " ,cnt);
    }
    return 0;
}