Pagini recente » Diferente pentru arbori-de-intervale intre reviziile 44 si 45 | Statistici Andi Koleci (Andi218) | Monitorul de evaluare | Cod sursa (job #993669) | Cod sursa (job #1036209)
#include <fstream>
#include <stack>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int N, str[100005];
int v[100005];
vector<int> lv[100005];
stack<int> s;
int top;
void DF(int r)
{
int i;
int l = lv[r].size();
s.push(r);
top++;
for( i = 0; i < l; i++)
{
int x;
x = lv[r][i];
if( !v[ x]) v[ x] = v[ top - 1 - str[x]] + 1;
DF(x);
}
s.pop();
top--;
}
int main()
{
int i, sol = 0, N, x, r;
fin>> N;
for(i = 1; i <= N; i++)
fin>>str[i];
for(i = 1; i < N; i++)
{
int x, y;
fin >> x>> y;
lv[x].push_back(y);
v[y] = 1;
}
for( i = 1; i <= N; i++)
if(!v[i]) r = i;
else v[i] = 0;
v[r] = 1;
DF( r);
for( i = 1; i <= N; i++)
fout<<v[i] - 1<<" ";
return 0;
}