Cod sursa(job #2833662)

Utilizator TudosieRazvanTudosie Marius-Razvan TudosieRazvan Data 15 ianuarie 2022 14:46:59
Problema Cerere Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <unordered_map>
#include <cstring>
#include <climits>

#define NMAX 100003
using namespace std;

int n;
int kMisc[NMAX + 3];
int tata[NMAX + 3];
int dist[NMAX + 3];

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

int cTata(int val)
{
	int k = val;
	int d = dist[val];
	while (d > 0 && tata[k] > 0)
	{
		d--;
		k = tata[k];
	}
	return k;
}

int ajung(int val)
{
	int k = val;
	int rez = 0;
	while (dist[k] > 0)
	{
		k = kMisc[k];
		rez++;
	}
	return rez;
}

int main()
{
	fin >> n;
	for (int i = 1; i <= n; i++)
	{
		fin >> dist[i];
	}
	for (int i = 1; i < n; i++)
	{
		int x, y;
		fin >> x >> y;
		tata[y] = x;
	}

	for (int i = 1; i <= n; i++)
	{
		kMisc[i] = cTata(i);
	}
	for (int i = 1; i <= n; i++)
	{
		fout << ajung(i)<<" ";
	}
	return 0;
}