Cod sursa(job #2791597)

Utilizator cezar.balutaCezar Baluta cezar.baluta Data 30 octombrie 2021 20:23:02
Problema Cerere Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 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;
bitset<N+1>dif_radacina;

void parcurgere(int x){
    stram[cnt]=x;
    if(stramos[x]!=0){
        rezultat[x]=rezultat[stram[cnt-stramos[x]]]+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;
            break;
        }
    }
    parcurgere(radacina);
    for(int i=1;i<=n;i++){
        out<<rezultat[i]<<" ";
    }
    return 0;
}