Cod sursa(job #3159201)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 20 octombrie 2023 21:46:47
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda HLO 2023 - Cls 11-12 - Tema 0 Marime 1.05 kb
#include <bits/stdc++.h>

#pragma optimize GCC ("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

///#include <tryhardmode>
///#include <GODMODE::ON>

using namespace std;

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

const int NMAX=1e5+5;

vector<int>v[NMAX];

int t[NMAX];
int dp[NMAX];
int iq[NMAX];
int on[NMAX];

void dfs(int p,int level)
{
    on[level]=p;
    if(iq[p]==0)
        dp[p]=0;
    else
        dp[p]=1+dp[on[level-iq[p]]];
    for(auto i:v[p])
        dfs(i,level+1);
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n,i,j;
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>iq[i];
    for(i=1;i<n;i++)
    {
        int x,y;
        fin>>x>>y;
        t[y]=x;
        v[x].push_back(y);
    }
    int root=1;
    for(i=1;i<=n;i++)
    {
        if(!t[i])
        {
            root=i;
            break;
        }
    }
    dfs(root,1);
    for(i=1;i<=n;i++)
        fout<<dp[i]<<" ";
    return 0;
}