Pagini recente » Cod sursa (job #287618) | Cod sursa (job #2336173) | Cod sursa (job #898358) | Cod sursa (job #2417584) | Cod sursa (job #553431)
Cod sursa(job #553431)
#include<stdio.h>
#include<vector>
#define nmax 100010
#include<algorithm>
using namespace std;
int n,m,i,z,j,x,y,nr;
int tata[nmax];
struct punct{
int v,t,p,pas,pc;
};
punct T[nmax];
int cmp(punct a,punct b){
if(a.t==b.t)
return a.p<b.p;
else
return a.t<b.t;
}
int cmpp(punct a, punct b){
return a.p<b.p;
}
int main(){
FILE*f=fopen("cerere.in","r");
FILE*g=fopen("cerere.out","w");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++){
fscanf(f,"%d",&T[i].v);
}
for(i=1;i<n;i++){
fscanf(f,"%d %d",&x,&y);
T[y].t=x;
tata[y]=x;
}
for(i=1;i<=n;i++)
T[i].p=i;
sort(T+1,T+n+1,cmp);
for(i=1;i<=n;i++)
T[T[i].p].pc=i;
for(i=1;i<=n;i++){
if(T[i].v==0)
T[i].pas=0;
else{
z=T[i].v;
m=i;
while(z){
m=T[T[m].pc].t;
z--;
}
if(T[T[m].pc].pas==0)
T[i].pas=1;
else
T[i].pas=T[m].pas+1;
}
}
sort(T+1,T+n+1,cmpp);
for(i=1;i<=n;i++)
fprintf(g,"%d ",T[i].pas);
fclose(f);
fclose(g);
return 0;
}