Pagini recente » Cod sursa (job #2430829) | Cod sursa (job #1661038) | Cod sursa (job #3237665) | Cod sursa (job #2133629) | Cod sursa (job #2980744)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
const int N = 1e5;
vector<vector<int>> fii(N + 1);
vector<int> tati(N + 1, 0), stramos(N + 1), drum(N + 1), nr_c(N + 1);
int n;
void dfs(int x, int nivel) {
drum[nivel] = x;
if(stramos[x] != 0) {
nr_c[x] = 1 + nr_c[drum[nivel - stramos[x]]];
}
for(auto y : fii[x]) {
dfs(y, nivel + 1);
}
}
int radacina() {
for(int i = 1; i <= n; i++) {
if(tati[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; i++) {
int x, y;
in >> x >> y;
tati[y] = x;
fii[x].push_back(y);
}
in.close();
int r = radacina();
dfs(r, 0);
for(int i = 1; i <= n; i++) out << nr_c[i] << ' ';
out.close();
return 0;
}