Pagini recente » Cod sursa (job #885545) | Cod sursa (job #2407841) | Cod sursa (job #2238388) | Cod sursa (job #774117) | Cod sursa (job #2980740)
/*
Lefter Sergiu - 16/02/2023
*/
#include <fstream>
#include <vector>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
const int N = 1e5;
int n, T[N+1], stramos[N+1], drum[N+1], nrC[N+1];
vector<int> a[N+1];
void DFS(int nod, int nivel) {
drum[nivel] = nod;
if (stramos[nod] != 0) {
nrC[nod] = 1 + nrC[drum[nivel - stramos[nod]]];
}
for (auto i: a[nod]) {
DFS(i, nivel + 1);
}
}
int radacina() {
for (int i = 1; i <= n; ++i) {
if (T[i] == 0) {
return i;
}
}
return 0;
}
int main() {
in >> n;
for (int i = 1; i <= n; ++i) {
in >> stramos[i];
}
for (int i = 1; i <= n - 1; ++i) { //arborele cu n noduri are n - 1 muchii
int x, y;
in >> x >> y;
T[y] = x; //tata
a[x].push_back(y); //fii
}
int r = radacina();
DFS(r, 0);
for (int i = 1; i <= n; ++i) {
out << nrC[i] << " ";
}
in.close();
out.close();
return 0;
}