Pagini recente » Cod sursa (job #586576) | Cod sursa (job #1151666) | Cod sursa (job #175849) | Cod sursa (job #2327640) | Cod sursa (job #180189)
Cod sursa(job #180189)
#include <stdio.h>
#define NMAX 100001
int n, c[NMAX], nr[NMAX], viz[NMAX], st[NMAX], poz;
struct nod{
int inf;
nod *urm;
} *G[NMAX];
void add(nod*&p, int x){
nod *q=new nod;
q->inf=x;
q->urm=p;
p=q;
}
void read(){
FILE *f=fopen("cerere.in", "r");
fscanf(f, "%d", &n);
int i, x, y;
for(i=1; i<=n; ++i)
fscanf(f, "%d ", &c[i]);
for(i=1; i<n; ++i) {
fscanf(f, "%d %d", &x, &y);
add(G[x], y); viz[y]++;
}
}
void df(int v){
if(poz>0)
if(c[v]) nr[v] = 1 + nr[st[poz-c[v]]];
st[poz++]=v;
viz[v]=1;
nod *p;
for(p=G[v]; p; p=p->urm)
if(!viz[p->inf]){
df(p->inf);
poz--;
}
}
int main(){
read();
FILE *g=fopen("cerere.out", "w");
int i, r;
for(i=1; i<=n; viz[i++]=0)
if(!viz[i]) r=i;
// st[poz++]=r;
df(r);
for(i=1; i<=n; ++i)
fprintf(g, "%d ", nr[i]);
fclose(g);
return 0;
}