Cod sursa(job #2954098)

Utilizator MihaiCostacheCostache Mihai MihaiCostache Data 13 decembrie 2022 10:46:22
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n, k[100001], a, b, t[100001], nr, st[100001], sol[100001], viz[100001];
vector<int>l[100001];
void dfs(int nod, int nivel)
{
    viz[nod]=1;
    st[nivel]=nod;
    if(k[nod])
    {
        sol[nod]=1+sol[st[nivel-k[nod]]];
    }
    for(int i=0;i<l[nod].size(); i++)
    {
        int vecin=l[nod][i];
        if(viz[vecin]==0)
        {
            dfs(vecin, nivel+1);
        }
    }
}

int main()
{
    fin>>n;
    for(int i=1; i<=n; i++)
    {
        fin>>k[i];
    }
    for(int i=1; i<n; i++)
    {
        fin>>a>>b;
        l[a].push_back(b);
        t[b]=a;
    }
    for(int i=1; i<=n; i++)
    {
        if(t[i]==0)
        {
            dfs(i, 1);
            break;
        }
    }
    for(int i=1; i<=n; i++)
    {
        fout<<sol[i]<<" ";
    }
    return 0;
}