Cod sursa(job #244619)

Utilizator robigiirimias robert robigi Data 15 ianuarie 2009 17:35:04
Problema Dosare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#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;
}