Pagini recente » Cod sursa (job #1375456) | Cod sursa (job #3128462) | Cod sursa (job #3238805) | Cod sursa (job #1085059) | Cod sursa (job #209238)
Cod sursa(job #209238)
#include<stdio.h>
#include<vector>
#define NMAX 100024
using namespace std;
int sol[NMAX],S[NMAX];
vector< int >q[NMAX];
bool viz[NMAX],father[NMAX];//de fapt viz e inutil
int sf;
void df(const int nod)
{
vector< int >::iterator it;
int ex;
for( it=q[nod].begin(); it!=q[nod].end(); ++it)
{
if( viz[ *it ]==false )
{
S[++sf]=*it;
viz[*it]=true;
if( sol[*it] ){
ex=sf-sol[*it];
sol[*it]=sol[S[ex]]+1;
}
df(*it);
--sf;
}
}
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
int N;
scanf("%d",&N);
int i;
for(i=1; i<=N; ++i)
scanf("%d",&sol[i]);
int a1,a2;
for(i=1; i<N; ++i){
scanf("%d%d",&a1,&a2);
q[a1].push_back(a2);
father[a2]=true;
}
int source;
for(i=1; i<=N; ++i)
if( father[i]==false ){
source=i;break;}
viz[source]=true;
S[1]=source;sf=1;
df(source);
for(i=1; i<=N; ++i)
printf("%d ",sol[i]);
printf("\n");
return 0;
}