Cod sursa(job #1235289)

Utilizator CiurezAndreiCiurez Marius-Andrei CiurezAndrei Data 29 septembrie 2014 13:55:47
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector <int> L[100100];
int a,b, D[100100],n,N[100100],i,v[100100],k[100100],t[100100];

void dfs(int nod, int niv){
    N[niv]=nod;
    v[nod]=1;
    if(k[nod]!=0)
        D[nod]=D[N[niv-k[nod]]]+1;

    for(int i=0;i<L[nod].size();i++)
        if(v[L[nod][i]] == 0)
            dfs(L[nod][i],niv+1);

   // int x=niv;
    //while(k[N[x]]){
      //  D[nod]++;
        //x-=k[N[x]];
    //}
}
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>k[i];
    for(i=1;i<n;i++){
        fin>>a>>b;
        L[a].push_back(b);
        t[b]=a;
    }
    for(i=1;i<=n;i++)
        if(t[i]==0)
            break;
    dfs(i,1);
    for(i=1;i<=n;i++)
        fout<<D[i]<<" ";


    return 0;
}