Cod sursa(job #2781642)

Utilizator CelestinNegraru Celestin Celestin Data 10 octombrie 2021 01:18:17
Problema Cerere Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <vector>
#define maxi 100005
using namespace std;
ifstream f;
ofstream g;
vector<int> V[maxi];
bool viz[maxi];
int D[maxi],nod[maxi],ancestor[maxi],n,a,b,tata[maxi],root;
void READ()
{
    f>>n;
    for(int i=1;i<=n;i++)
        f>>ancestor[i];
    for(int i=1;i<=n-1;i++)
    {
        f>>a>>b;
        tata[b]=a;
        V[a].push_back(b);
    }
    return;
}
void DFS(int x,int lvl)
{
    viz[x]=true;
    nod[lvl]=x;
    if(ancestor[x])
     D[x]=D[nod[lvl-ancestor[x]]]+1;
    for(auto a:V[x])
        if(!viz[a])
            DFS(a,lvl+1);
}
int main()
{
    f.open("cerere.in",ios::in);
    g.open("cerere.out",ios::out);
     READ();
     for(int i=1;i<=n;i++)
        if(!tata[i])
        {
            root=i;
            break;
        }
     DFS(root,0);
     for(int i=1;i<=n;i++)
        g<<D[i]<<" ";
    f.close();
    g.close();
    return 0;
}