Pagini recente » Cod sursa (job #1277997) | Cod sursa (job #2913784) | Cod sursa (job #1644192) | Cod sursa (job #1229085) | Cod sursa (job #596089)
Cod sursa(job #596089)
#include<stdio.h>
#include<malloc.h>
#define MaxN 100100
typedef struct _nod
{
int info;
struct _nod *adr;
} nod;
typedef struct
{
struct _nod *cap;
} list;
list A[MaxN];
int K[MaxN];
int sol[MaxN];
int V[MaxN];
bool viz[MaxN];
int N;
void add(int a,int b)
{
nod *nou = (nod*)malloc(sizeof(nod));
nou->info = b;
nou->adr = A[a].cap;
A[a].cap = nou;
}
void citire(void)
{
int a;
int b;
FILE *f = fopen("cerere.in","r");
fscanf(f,"%d ",&N);
for(int i=1;i<=N;i++)
fscanf(f,"%d ",&K[i]);
for(int i=1;i<=N-1;i++)
{
fscanf(f,"%d %d",&a,&b);
add(a,b);
viz[b] = true;
}
fclose(f);
}
int FindRad(void)
{
int i;
for(i = 1;viz[i];i++);
return i;
}
void parcurgere(int a,int k)
{
V[k] = a;
nod *q = A[a].cap;
while(q)
{
if(K[q->info])
sol[q->info] = sol[V[k-K[q->info]+1]] + 1;
parcurgere(q->info,k+1);
q = q->adr;
}
}
int main()
{
FILE *g = fopen("cerere.out","w");
citire();
parcurgere(FindRad(),1);
for(int i=1;i<=N;i++)
fprintf(g,"%d ",sol[i]);
fclose(g);
return 0;
}