Cod sursa(job #2791614)

Utilizator cezar.balutaCezar Baluta cezar.baluta Data 30 octombrie 2021 20:39:43
Problema Cerere Scor 85
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <vector>
#include <fstream>

using namespace std;

const int N=100001;
vector<int> a[N];
int stram[N];
int stramos[N];
int rezultat[N];

int str;
bool dif_radacina[N];

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

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,0);
    for(int i=1;i<=n;i++){
        out<<rezultat[i]<<' ';
    }
    return 0;
}