Cod sursa(job #2358693)

Utilizator mirceaisherebina mircea mirceaishere Data 28 februarie 2019 11:21:22
Problema Cerere Scor 85
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");

int i, j, n, m, k[100010], x, y, sol, v[100010], s[100010], d[100010], t[100010], start;
vector<int>a[100010];

void DFS(int nod1, int pas){
    s[pas]=nod1;
    d[nod1]=1+d[s[pas-k[nod1]]];
    v[nod1]=1;
    for(int i=0; i<a[nod1].size(); i++){
        int nod2=a[nod1][i];
        if(v[nod2]==0){
            DFS(nod2, pas+1);
        }
    }
}

int main(){
    fin>>n;
    for(i=1; i<=n; i++){
        fin>>k[i];
    }
    for(i=1; i<n; i++){
        fin>>x>>y;
        a[x].push_back(y);
        a[y].push_back(x);
        t[y]=x;
    }
    for(i=1; i<=n; i++){
        if(t[i]==0){
            start=i;
            break;
        }
    }
    DFS(start, 1);
    for(i=1; i<=n; i++){
        fout<<d[i]-1<<" ";
    }
}