Cod sursa(job #3252061)

Utilizator alecu2008Alecu Alexandru alecu2008 Data 28 octombrie 2024 12:47:04
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <iostream>
#include <bits/stdc++.h>

using namespace std;

ifstream fin("cerere.in");
ofstream fout("cerere.out");

const int nmax=100005;


int n,x,y,str[nmax],strv[nmax];
bitset<nmax>vas,nustr;
vector<int>spate,tree[nmax];

void dfs(int nod,int in){
    vas[nod]=1;
    spate.push_back(nod);
    strv[nod]=1+strv[spate[in-str[nod]]];
    for(int i:tree[nod]){
        if(!vas[i]){
            dfs(i,in+1);
        }
    }
    spate.resize(spate.size()-1);

}



int main()
{

    fin>>n;
    for(int i=1;i<=n;i++){
        fin>>str[i];
        strv[i]=-1;
    }
    for(int i=1;i<n;i++){
        fin>>x>>y;
        nustr[y]=1;
        tree[x].push_back(y);
        tree[y].push_back(x);
    }

    for(int i=1;i<=n;i++){
        if(!nustr[i]){
            dfs(i,0);
            break;
        }
    }
    for(int i=1;i<=n;i++){
        fout<<strv[i]<<' ';
    }
    return 0;
}