Cod sursa(job #2791599)

Utilizator cezar.balutaCezar Baluta cezar.baluta Data 30 octombrie 2021 20:26:30
Problema Cerere Scor 95
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <bitset>

using namespace std;

const int N=100005;
vector<int> a[N+1];
int stram[N+1];
int stramos[N+1];
int rezultat[N+1];
int cnt=0;
int str;
bitset<N+1>dif_radacina;

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

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);
        dif_radacina[y]=true;
    }
    int radacina;
    for(int i=1;i<=n;i++){
        if(!dif_radacina[i]) {
            radacina = i;
        }
    }
    parcurgere(radacina);
    for(int i=1;i<=n;i++){
        out<<rezultat[i]<<' ';
    }
    return 0;
}