Pagini recente » Cod sursa (job #841222) | Cod sursa (job #1891088) | Cod sursa (job #3269829) | Cod sursa (job #79926) | Cod sursa (job #2980742)
#include <fstream>
#include <vector>
using namespace std;
const int N = 1e5;
vector <int> fii[N+1];
int t[N+1], stramos[N+1], drum[N+1], nr_c[N+1];
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(int n)
{
for (int i = 1; i <= n; i++)
{
if (t[i] == 0)
{
return i;
}
}
return 0;
}
int main()
{
ifstream in("cerere.in");
ofstream out("cerere.out");
int n;
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;
t[y] = x;
fii[x].push_back(y);
}
int r = radacina(n);
dfs(r, 0);
for (int i = 1; i <= n; i++)
{
out << nr_c[i] << " ";
}
in.close();
out.close();
return 0;
}