Pagini recente » Rating Duican Mihnea (mihnea00) | Rating Cristian Sandu (cristiansandu) | Rating gabi gab (nightred) | Cod sursa (job #1019987) | Cod sursa (job #353449)
Cod sursa(job #353449)
#include<stdio.h>
#include<vector>
#define N 100000
using namespace std;
int n,ptr;
vector <int> a[N];
bool tacsu_lui_Epure[N];
int cretin[N];
int EpureLung[N];
int Telemea_de_epure[N];
void Epure_sufera()
{
int x,y,k=0,u;
scanf("%d",&n);
for(int i=0;i<n;++i)
scanf("%d",cretin+i);
for(int i=1;i<n;++i)
{
scanf("%d%d",&x,&y);
tacsu_lui_Epure[y] = true;
a[x].push_back(y);
}
}
int tatalluiEpure()
{
for(int i=1;i<=n;++i)
if(!tacsu_lui_Epure[i])
return i;
}
void DFS(int nod)
{
Telemea_de_epure[++ptr]=nod;
if(cretin[nod])
EpureLung[nod]=EpureLung[Telemea_de_epure[ptr-cretin[nod]]]+1;
else
EpureLung[nod]=0;
for(int i=0;i<a[nod].size();++i)
DFS(a[nod][i]);
--ptr;
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
Epure_sufera();
DFS(tatalluiEpure());
for(int i=0;i<n;++i)
printf("%d ",*(EpureLung+i));
return 0;
}