Cod sursa(job #2448286)

Utilizator Stefan_PiscuPiscu Stefan Constantin Stefan_Piscu Data 16 august 2019 14:59:39
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
#include <vector>

using namespace std;

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

struct nod{
              vector<int> v;
              int nr, k;
          }g[100003];

int s[100003], vf=0, n;
bool t[100003];

void dfs(int x=1)
{
    s[++vf]=x;
    {
        if(g[x].k) g[x].nr=g[s[vf-g[x].k]].nr+1;
        for(int i=0;i<g[x].v.size();++i) dfs(g[x].v[i]);
    }
    vf--;
}

int main()
{
    fin>>n;
    for(int i=1;i<=n;++i)
    {
        fin>>g[i].k;
        if(g[i].k==0) g[i].nr=0;
    }
    for(int i=2;i<=n;++i)
    {
        int x, y;
        fin>>x>>y;
        g[x].v.push_back(y);
        t[y]=1;
    }
    int root=0;
    for(int i=1;i<=n;++i)
    {
        if(!t[i]) root=i;
    }
    dfs(root);
    for(int i=1;i<=n;++i) fout<<g[i].nr<<" ";
    fout<<"\n";
    return 0;
}