Cod sursa(job #2953352)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 11 decembrie 2022 01:21:21
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

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

using namespace std;

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

const int step=1;
const int NMAX=1e5+5;

vector<int>v[NMAX];
int monkey[NMAX];
int dp[NMAX];
int lvl[NMAX];  /// o sa retinem nodul curent de pe nivelul i

int tati[NMAX];

void dfs(int p,int nivel)
{
    lvl[nivel]=p;
    if(monkey[p]==0)
        dp[p]=0;
    else
        dp[p]=dp[lvl[nivel-monkey[p]]]+step;
    for(auto i:v[p])
        dfs(i,nivel+1);
}

int main()
{
    int n,i,j,m,iq_200,x,y;
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>monkey[i];
    for(i=1;i<n;i++)
    {
        fin>>x>>y;
        tati[y]=x;
        v[x].push_back(y);
    }
    for(i=1;i<=n;i++)
        if(tati[i]==0)
        {
            iq_200=i;
            break;
        }
    dfs(iq_200,1);
    for(i=1;i<=n;i++)
        fout<<dp[i]<<" ";
    return 0;
}