Cod sursa(job #2953935)

Utilizator Zed1YasuoAlex Birsan Zed1Yasuo Data 12 decembrie 2022 17:58:47
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int n,v[100003],x,y,dist[100003],fr[100003];
vector<int>a[100003];
void dfs(int nod,int nivel)
{
    fr[nivel]=nod;
    if(v[nod]==0)
        dist[nod]=0;
    else
        dist[nod]=dist[fr[nivel-v[nod]]]+1;
    for(int i=0;i<a[nod].size();i++)
    {
        int vecin=a[nod][i];
        dfs(vecin,nivel+1);
    }
}
int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
        f>>v[i];
    for(int i=1;i<n;i++)
    {
        f>>x>>y;
        a[x].push_back(y);
        fr[y]=x;
    }
    int r=0;
    for(int i=1;i<=n;i++)
    {
         if(fr[i]==0)
            r=i;
        fr[i]=0;
    }
    dfs(r,1);
    for(int i=1;i<=n;i++)
        g<<dist[i]<<" ";
    return 0;
}