Cod sursa(job #2171885)

Utilizator Te_pup_dulce_nu_plecaClorina Intergalactica Valoroasa Te_pup_dulce_nu_pleca Data 15 martie 2018 14:00:08
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
#include <vector>
#define nmax 100001
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int k[nmax],t[nmax],rez[nmax],n;
vector <int> G[nmax];
vector <int> arb;

void dfs(int nod)
{
    if(k[nod]!=0)
        rez[nod]=rez[arb[arb.size()-k[nod]]]+1;
    arb.push_back(nod);
    for(int i=0;i<G[nod].size();i++)
        dfs(G[nod][i]);
    arb.pop_back();
}

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

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

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

    for(int i=1;i<=n;i++)
        fout<<rez[i]<<" ";

    return 0;
}