Pagini recente » Cod sursa (job #2659165) | Cod sursa (job #1240362) | Cod sursa (job #2724491) | Cod sursa (job #2879701) | Cod sursa (job #2657293)
//
// main.cpp
// cerere
//
// Created by Eusbeiu Rares on 09/10/2020.
// Copyright © 2020 Eusebiu Rares. All rights reserved.
//
#include <iostream>
#include "fstream"
#include "vector"
const int MV = 1e5 ;
const int LB = 15 ;
const int INF = 1e9 ;
std::fstream in ("cerere.in", std::ios::in) ;
std::fstream out ("cerere.out", std::ios::out) ;
int k[MV + 1] ;
int sol[MV + 1] ;
int solLvl[MV + 1] ;
std::vector<int> G[MV + 1] ;
void dfs(int node, int lvl) {
if (k[node] == 0) {
sol[node] = 0 ;
solLvl[lvl] = 0 ;
} else {
sol[node] = solLvl[lvl - k[node]] + 1 ;
solLvl[lvl] = sol[node] ;
}
for (auto it : G[node]) {
dfs(it, lvl + 1) ;
}
}
int main(int argc, const char * argv[]) {
int n, i, A, B ;
in >> n ;
int rad(n * (n + 1) / 2) ;
for (i = 1 ; i <= n ; ++ i) {
in >> k[i] ;
}
for (i = 1 ; i <= n - 1 ; ++ i) {
in >> A >> B ;
G[A].push_back(B) ;
rad -= B ;
}
dfs(rad, 1) ;
for (i = 1 ; i <= n ; ++ i) {
out << sol[i] << ' ' ;
}
}