Pagini recente » Cod sursa (job #104670) | Cod sursa (job #1877784) | Cod sursa (job #339226) | Cod sursa (job #1584763) | Cod sursa (job #244650)
Cod sursa(job #244650)
#include <fstream>
using namespace std;
ifstream f ("dosare.in");
ofstream g ("dosare.out");
int n, nr, d[10000], fr[10000], t;
void read()
{ f >> n;
for (int i=2; i<=n; i++)
f >> d[i];
for (int i=1; i<=n; i++)
f >> fr[i];
}
void sortare (int x)
{ int ak[10000], nrc[10000];
int nr=0;
for (int i=2; i<=n; i++)
{ if (d[i]==x) ak[++nr]=i;
}
int ok;
do
{ ok=0;
for (int 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 (int 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) << endl;
f.close();
g.close();
return 0;
}