Pagini recente » Cod sursa (job #2261335) | Cod sursa (job #804025) | Cod sursa (job #2040736) | Cod sursa (job #854932) | Cod sursa (job #253364)
Cod sursa(job #253364)
#include<stdio.h>
#include<algorithm>
using namespace std;
int *v[20011],nr[20011];
int N,sol[20011],a[20011],n,i,x,s[20011],c[20011];
int cmp(int A,int B){
return a[A] > a[B];
}
void parc(int x){
int i;
for(i=1;i<=v[x][0];i++){
parc(v[x][i]);
a[x]+=a[v[x][i]];
}
}
void parc2(int x,int y){
int i;
a[x]=y;
for(i=1;i<=v[x][0];i++){
parc2(v[x][i],y+i);
}
}
int main(){
FILE *f=fopen("dosare.in","r");
FILE *g=fopen("dosare.out","w");
fscanf(f,"%d",&n);
for(i=2;i<=n;i++){
fscanf(f,"%d",&x);
nr[x]++;
}
fclose(f);
for(i=1;i<=n;i++){
v[i]=new int [nr[i]+3];
v[i][0]=0;
}
FILE *ff=fopen("dosare.in","r");
fscanf(ff,"%d",&n);
for(i=2;i<=n;i++){
fscanf(ff,"%d",&x);
v[x][0]++;
v[x][v[x][0]]=i;
}
for(i=1;i<=n;i++){
fscanf(ff,"%d",&a[i]);
s[i]=a[i];
}
long long rez=0;
parc(1);
for(i=1;i<=n;i++)
sort(v[i]+1,v[i]+v[i][0]+1,cmp);
a[1]=1;
parc2(1,1);
for(i=1;i<=n;i++){
rez+=(long long)a[i]*(long long)s[i];
}
fprintf(g,"%lld",rez);
fclose(ff);
fclose(g);
return 0;
}