Cod sursa(job #1757069)

Utilizator cameleonGeorgescu Dan cameleon Data 14 septembrie 2016 14:03:53
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>
#include<vector>
#define Nmax 100005
using namespace std;

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

vector <int> v[Nmax];
int n, k[Nmax], rad, tata[Nmax], st[Nmax], niv, sol[Nmax];

void read(){
    int a, b;

    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>k[i];

    for(int i=1;i<=n-1;i++){
        fin>>a>>b;
        v[a].push_back(b);
        tata[b]=a;
    }

    for(int i=1;i<=n;i++)
        if(tata[i]==0)
            rad=i;
}

void dfs(int rad,int niv){
    st[niv]=rad;
    if(niv-k[rad]>0)
        sol[rad]=sol[st[niv-k[rad]]]+1;

    for(int i=0;i<v[rad].size();i++)
       dfs(v[rad][i],niv+1);
}

int main()
{
    read();
    dfs(rad,1);
    for(int i=1;i<=n;i++)
        fout<<sol[i]-1<<" ";
  return 0;

}