Cod sursa(job #3141525)

Utilizator matei__bBenchea Matei matei__b Data 14 iulie 2023 12:30:10
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <bits/stdc++.h>
#define ll long long 
#define mod 1000000007
#define dim 100002
#define lim 1000000
#define mdim 1501
#define mult 2e9
#define maxx 200000
#define simaimult 1e17
#define piii pair<int,pair<int,int> > 
#define pii pair<int,int>
#define pb push_back
#define mp make_pair
#define nr_biti __builtin_popcount
using namespace std;

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

int n;
vector<int> g[dim];
int lant[dim],k[dim],t[dim],ans[dim];
int vf;

void dfs(int nod,int daddy=-1)
{
    lant[++vf]=nod;

    ans[nod]=1+ans[lant[vf-k[nod]]];

    for(auto it:g[nod])
    {
        if(it==daddy)
            continue;

        dfs(it,nod);
    }

    vf--;
}

int main()
{
    ios_base::sync_with_stdio(false);
    fin.tie(nullptr);
    fout.tie(nullptr);

    fin >> n;

    for(int i=1; i<=n; i++)
        fin >> k[i];
    
    for(int i=1; i<n; i++)
    {
        int x,y;

        fin >> x >> y;

        t[y]=x;

        g[x].pb(y);
        g[y].pb(x);
    }

    int rad=0;

    for(int i=1; i<=n; i++)
    {
        if(!t[i])
        {
            rad=i;
            break;
        }
    }

    //cout << rad << "\n";

    dfs(rad);

    for(int i=1; i<=n; i++)
        fout << ans[i]-1 << " ";

    return 0;
}