Cod sursa(job #209251)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 21 septembrie 2008 16:26:04
Problema Dosare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<stdio.h>
#include<string.h>
long n,tr[3001],l[3001],s[3001][3001],i,p[3001],q,x[3001],j,t,k;
int main()
{
 freopen("dosare.in","r",stdin);
 freopen("dosare.out","w",stdout);
 scanf("%ld",&n);
 tr[1]=1;
 l[1]=1;
 s[1][1]=1;
 for(i=2;i<=n;++i)
     {
     scanf("%ld",&p[i]);
     
     tr[i]=tr[p[i]]+1;
     memcpy(s[i],s[p[i]],sizeof(s[p[i]]));
     l[i]=l[p[i]]+1;
     s[i][l[i]]=i;
     }
 for(i=1;i<=n;++i)
    {
     scanf("%ld",&q);
     x[i]+=q;
     for(j=l[i]-1;j>0;--j)x[s[i][j]]+=q;
    }
 t=0;
 for(i=1;i<=n;++i)
    for(j=1;j<=l[i];++j)
       {
        for(k=1;k<=n;++k)
           if((x[k]>x[s[i][j]]||(x[k]==x[s[i][j]]&&s[i][j]>k))&&p[k]==p[s[i][j]])++t;
        ++t;
       }
 printf("%ld\n",t);
 return 0;
}