Cod sursa(job #2657293)

Utilizator rares404AlShaytan - Balasescu Rares rares404 Data 10 octombrie 2020 11:15:46
Problema Cerere Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
//
//  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] << ' ' ;
	}
}