Pagini recente » Cod sursa (job #2879553) | Cod sursa (job #2141361) | Cod sursa (job #662082) | Cod sursa (job #2671086) | Cod sursa (job #2705326)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector<int> l[100005];
int n, i, a, b;
long long x;
int k[100005], v[100005], P[100005];
bool ok[100005], o[100005];
void dfs(int x, int niv)
{
ok[x] = 1;
P[niv] = x;
v[x] = v[P[niv-k[x]]] + 1;
for(int i = 0; i < l[x].size(); i++)
{
int y = l[x][i];
if(!ok[y])
dfs(y, niv+1);
}
}
int main()
{
fin >> n;
for(int i = 1; i <= n; i++)
{
fin >> k[i];
v[i] = -1;
}
x = 1LL * n * (n + 1) / 2;
for(int i = 1; i < n; i++)
{
fin >> a; fin >> b;
l[a].push_back(b);
x -= b;
}
dfs((int)x, 1);
for(int i = 1; i <= n; i++)
fout << v[i] << " ";
return 0;
}