Pagini recente » Cod sursa (job #1397727) | Cod sursa (job #520230) | Cod sursa (job #2367411) | Cod sursa (job #611858) | Cod sursa (job #220015)
Cod sursa(job #220015)
#include<stdio.h>
#include<algorithm>
using namespace std;
struct nod{long long inf;nod *urm;} *v[20011];
long long N,sol[20011],a[20011],n,i,x,s[20011],c[20011];
int cmp(long long A,long long B){
return a[A] > a[B];
}
void parc(long long x){
nod *q;
for(q=v[x];q!=NULL;q=q->urm){
parc(q->inf);
a[x]+=a[q->inf];
}
}
int main(){
FILE *f=fopen("dosare.in","r");
FILE *g=fopen("dosare.out","w");
fscanf(f,"%lld",&n);
for(i=2;i<=n;i++){
fscanf(f,"%lld",&x);
nod *p=new nod;
p->inf=i;
p->urm=v[x];
v[x]=p;
}
for(i=1;i<=n;i++){
fscanf(f,"%lld",&a[i]);
s[i]=a[i];
}
parc(1);
sol[1]=1;
nod *p;
long long j,rez=s[1];
for(i=1;i<=n;i++){
memset(c,0,sizeof(c));
N=0;
for(p=v[i];p!=NULL;p=p->urm){
N++;
c[N]=p->inf;
}
sort(c+1,c+N+1,cmp);
for(j=1;j<=N;j++){
sol[c[j]]=sol[i]+j;
rez+=(sol[c[j]]*s[c[j]]);
}
}
fprintf(g,"%lld",rez);
fclose(f);
fclose(g);
return 0;
}