Cod sursa(job #2791619)

Utilizator cezar.balutaCezar Baluta cezar.baluta Data 30 octombrie 2021 21:05:02
Problema Cerere Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <vector>
#include <fstream>
#include <bitset>

using namespace std;

const int N=100001;
vector<int> a[N];
int stram[N];
int stramos[N];
int cnt=0;
bitset<N>dif_radacina;

void parcurgere(int x){
    stram[cnt]=x;
    if(stramos[x]!=0){
        int str=stram[cnt-stramos[x]];
        stramos[x]=stramos[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;
            i=n+1;
        }

    }
    parcurgere(radacina);
    for(int i=1;i<=n;i++){
        out<<stramos[i]<<" ";
    }
}