Cod sursa(job #2791549)

Utilizator cezar.balutaCezar Baluta cezar.baluta Data 30 octombrie 2021 18:12:50
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

const int N=100005;
vector<int> a[N+1];
int stram[N+1];
int stramos[N+1];
int rezultat[N];

int up(int x,int cnt){
    if(cnt==0)
        return x;
    else return up(stram[x],cnt-1);
}

void parcurgere(int x){

    if(stramos[x]!=0){
        int str=up(x,stramos[x]);
        rezultat[x]=rezultat[str]+1;
    }
    for(auto y:a[x]){
        parcurgere(y);
    }
}

int main() {
    ifstream in("cerere.in");
    ofstream out("cerere.out");
    int n;
    in>>n;
    for(int i=1;i<=n;i++){
        in>>stramos[i];
    }
    int x,y;
    for(int i=1;i<n;i++){
        in>>x>>y;
        a[x].push_back(y);
        stram[y]=x;
    }
    parcurgere(1);
    for(int i=1;i<=n;i++){
        out<<rezultat[i]<<" ";
    }
    return 0;
}