Pagini recente » Cod sursa (job #2861289) | Cod sursa (job #1760216) | Cod sursa (job #1384546) | Cod sursa (job #1930845) | Cod sursa (job #244619)
Cod sursa(job #244619)
#include <fstream.h>
ifstream f ("dosare.in");
ofstream g ("dosare.out");
int n, nr, d[1600], fr[1600], t;
void read()
{ f >> n;
for (int i=2; i<=n; i++)
f >> d[i];
for (i=1; i<=n; i++)
f >> fr[i];
}
void sortare (int x)
{ int ak[1600], nrc[1600];
int nr=0;
for (int i=2; i<=n; i++)
if (d[i]==x) ak[++nr]=i;
int ok;
do
{ ok=0;
for (i=1; i<=nr; i++)
if (fr[ak[i]]<fr[ak[i+1]])
{ int aux=ak[i];
ak[i]=ak[i+1];
ak[i+1]=aux;
ok=1;
}
}while (ok);
for (i=1; i<=nr; i++)
{ nrc[ak[i]]=fr[ak[i]]*i;
t+=fr[ak[i]]*i;
}
}
void nra()
{ for (int i=n; i>=2; i--)
fr[d[i]]+=fr[i];
}
void sistem()
{ nra();
for (int i=n; i>=1; i--)
sortare(i);
}
int main()
{ read();
int y=fr[1];
sistem();
for (int i=2; i<=n; i++)
if (d[i]==1) t+=fr[i];
g << (t+y);
return 0;
}