Cod sursa(job #3139787)

Utilizator andreea_chivuAndreea Chivu andreea_chivu Data 1 iulie 2023 17:20:50
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <fstream>
#include <vector>


using namespace std;

const int N = 100000;

int cer[N+1];
vector <int> fii[N+1];
int drum[N+1];
int dp[N+1];
int tata[N+1];

int adanc = 0;

void dfs(int x){
    drum[++adanc] = x;
    int stramos = drum[adanc - cer[x]];
    if(cer[x] == 0)
        dp[x] = 0;
    else
        dp[x] = 1 + dp[stramos];
    for(auto y: fii[x]){
        dfs(y);
    }
    adanc--;
}

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

    int n;
    fin >> n;
    for(int i = 1; i <= n; i++){
        fin >> cer[i];
    }

    for(int i = 0; i < n - 1; i++){
        int a, b;
        fin >> a >> b;
        fii[a].push_back(b);
        tata[b] = a;
    }
    int rad = 1;
    while(rad <= n && tata[rad]!=0){
        rad++;
    }

    dfs(rad);
    for(int i = 1; i <= n; i++){
        fout << dp[i] << " ";
    }

    fin.close();
    fout.close();
    return 0;
}