Cod sursa(job #2290434)

Utilizator Tudor27Tudor Iacob Tudor27 Data 26 noiembrie 2018 15:22:18
Problema Cerere Scor 45
Compilator cpp-32 Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

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

vector <int> v[100003];
int n;
int r[100003];
int g[100003];
int t[100003];
int dr[100003];

void dfs(int m,int pas){
    //cout<<m<<" ";
    dr[pas]=m;
    if(r[m]!=0){
        g[m]=g[dr[pas-r[m]]]+1;
    }
    for(int i=0;i<v[m].size();i++){
        dfs(v[m][i],pas+1);
    }
}

int main()
{
    int x,y,mm;
    fin>>n;
    for(int i=1;i<=n;i++){
        fin>>r[i];
    }
    for(int i=1;i<=n-1;i++){
        fin>>x>>y;
        t[y]=x;
        v[x].push_back(y);
    }

    for(int i=1;i<=n;i++){
        if(t[i]==0){
            mm=i;
        }
    }

    dfs(mm,0);
    for(int i=1;i<=n;i++){
       fout<<g[i]<<" ";
    }
    return 0;
}