Cod sursa(job #2563831)

Utilizator andreighinea1Ghinea Andrei-Robert andreighinea1 Data 1 martie 2020 15:04:08
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 100001

using namespace std;

ifstream f("cerere.in");
ofstream o("cerere.out");

vector<int> g[nmax];
int i,n,x,y,t[nmax],k[nmax],sol[nmax],nodram[nmax]; // nodul de pe ramura curenta, pt fiecare nivel in parte

void dfs(int x, int niv){
    nodram[niv]=x;
    if(k[x])
        sol[x]=sol[nodram[niv-k[x]]]+1;
    else
        sol[x]=0;

    int l=g[x].size(),v;
    for(int i=0;i<l;++i)
        dfs(g[x][i], niv+1);
}

int main()
{
    f >> n;
    for(i=1;i<=n;++i)
        f >> k[i];
    for(i=1;i<n;++i){
        f >> x >> y;
        t[y]=x;
        g[x].push_back(y);
    }
    for(i=1;i<=n;++i){
        if(!t[i]){
            dfs(i,0);
            break;
        }
    }

    for(i=1;i<=n;++i)
        o << sol[i] << " ";
    return 0;
}