Pagini recente » Cod sursa (job #869598) | Cod sursa (job #365104) | Cod sursa (job #1941999) | Cod sursa (job #468276) | Cod sursa (job #3688)
Cod sursa(job #3688)
#include <stdio.h>
#include <stdlib.h>
#define INF "cerere.in"
#define OUF "cerere.out"
#define NMAX 131072
int st[NMAX],rec[NMAX],sol[NMAX],sum=0;
struct nod
{
int c;
nod *next;
};
struct head
{
nod *p,*q;
}la[NMAX];
void dfs(nod *p,int k)
{
while(p!=NULL)
{
if(rec[p->c]!=0) st[k]=st[k-rec[p->c]]+1;
else st[k]=0;
sol[p->c]=st[k];
dfs(la[p->c].p,k+1);
p=p->next;
}
}
int main()
{
int i,n,x,k,master;
nod *op;
FILE *in,*out;
in=fopen(INF,"r");
out=fopen(OUF,"w");
fscanf(in,"%d",&n);
for(i=1;i<=n;i++) {la[i].p=la[i].q=NULL;fscanf(in,"%d",rec+i);}
master=n;
for(i=1;i<n;i++)
{
op=new nod;
op->next=NULL;fscanf(in,"%d %d",&x,&k);
op->c=k;
if(la[x].p==NULL){la[x].p=la[x].q=op;}
else {la[x].q->next=op;la[x].q=op;}
master=master^k;master=master^i;
}
st[1]=0;
dfs(la[master].p,1);
//printf("%d",master);
for(i=1;i<=n;i++) fprintf(out,"%d ",sol[i]);
fclose(in);fclose(out);
return 0;
}