Cod sursa(job #220050)

Utilizator katakunaCazacu Alexandru katakuna Data 9 noiembrie 2008 12:41:00
Problema Dosare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#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(f);
fclose(g);

return 0;
}