Pagini recente » Cod sursa (job #528622) | Cod sursa (job #1343700) | Cod sursa (job #79600) | Cod sursa (job #875185) | Cod sursa (job #190262)
Cod sursa(job #190262)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define FIN "cerere.in"
#define FOUT "cerere.out"
#define NMAX 100004
typedef struct nod
{
int info;
struct nod * next;
}NOD;
NOD * V[NMAX];
int N, ST[NMAX], H[NMAX], G[NMAX], SEL[NMAX];
void add( NOD * & p, int x )
{
NOD * q = new NOD;
q->info = x;
q->next = NULL;
if( !p )
p = q;
else
{
q->next = p;
p = q;
}
}
void DFS( int nod, int level )
{
NOD * tmp = V[nod];
if( H[nod] )
G[nod] = G[ST[level - H[nod]]] + 1;
ST[level] = nod;
while( tmp )
{
DFS( tmp->info, level + 1 );
tmp = tmp->next;
}
}
int main()
{
int i, root, X, Y;
FILE * fin = fopen( FIN, "r" );
FILE * fout = fopen( FOUT, "w" );
fscanf( fin, "%d", &N );
for( i = 1; i <= N; i++ )
fscanf( fin, "%d", H + i);
for( i = 1; i < N; i++ )
{
fscanf( fin, "%d%d", &X, &Y );
add( V[X], Y );
SEL[Y] = 1;
}
for( i = 1; i <= N; i++ )
if( !SEL[i] )
root = i;
DFS( root, 1 );
for( i = 1; i <= N; i++ )
fprintf( fout, "%d ", G[i] );
fclose( fin );
fclose( fout );
return 0;
}