Cod sursa(job #3032783)

Utilizator stefanvoicaVoica Stefan stefanvoica Data 22 martie 2023 18:48:34
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>
//#define int long long
#define mod 1000000007
using namespace std;
ifstream fin ("cerere.in");
ofstream fout("cerere.out");
const int dim=100002;
int n,K[dim],sol[dim],lant[dim];
bool apare[dim];
vector<int> a[dim];

void dfs (int x,int tata,int niv)
{
    lant[niv]=x;
    if (K[x]!=0)
    sol[x]=sol[lant[niv-K[x]]]+1;
    else    sol[x]=0;
    for (auto y:a[x])
        if (y!=tata)
    {
        dfs(y,x,niv+1);
    }
}

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

    int x,y,rad=0;
    for (int i=1;i<n;i++)
    {
        fin>>x>>y;
        apare[y]=1;
        a[x].push_back(y);
        a[y].push_back(x);
    }

    for (int i=1;i<=n && rad==0;i++)
    if (apare[i]==0)
        rad=i;
    K[rad]=0;
    dfs(rad,0,1);
    for (int i=1;i<=n;i++)
        fout<<sol[i]<<' ';
    return 0;
}