Pagini recente » Cod sursa (job #2647169) | Cod sursa (job #283854) | Cod sursa (job #2557149) | Cod sursa (job #1264395) | Cod sursa (job #1153034)
/*
Keep It Simple!
*/
#include<stdio.h>
#include<list>
#include<vector>
#define MaxN 100001
using namespace std;
vector<int> stramosi;
int N;
list<int> G[MaxN];
bool InLines[MaxN];
int root,k[MaxN],Dp[MaxN];
int Dads[MaxN];
int aux;
void DFS(int node)
{
/*
aux = node;
while(k[node] && aux != root)
{
aux = Dads[aux];
k[node]--;
}
*/
if(k[node])
Dp[node] = Dp[stramosi[stramosi.size() - k[node]]]+1;
else
Dp[node] = 0;
stramosi.push_back(node);
for(list<int>::iterator it = G[node].begin(); it!=G[node].end(); it++)
{
Dads[*it] = node;
DFS(*it);
}
stramosi.pop_back();
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&N);
for(int i=1;i<=N;i++)
scanf("%d",&k[i]);
int x,y;
for(int i=2;i<=N;i++)
{
scanf("%d%d",&x,&y);
G[x].push_back(y);
InLines[y] = 1;
}
for(int i=1;i<=N;i++)
if(!InLines[i])
{
root = i;
break;
}
DFS(root);
for(int i=1;i<=N;i++)
printf("%d ",Dp[i]);
}