Cod sursa(job #978584)

Utilizator superman_01Avramescu Cristian superman_01 Data 29 iulie 2013 01:34:41
Problema Dosare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<fstream>
#include<algorithm>
#include<vector>

#define NMAX 16005

using namespace std;

ifstream f("dosare.in");
ofstream g("dosare.out");

vector < int > G[NMAX];
int N,cost[NMAX];
int acc[NMAX];
bool used[NMAX];

inline void DepthFirstSearch ( int node , int level )
{
	cost[node] = level ;
	used[node] = true ; 
	for( vector < int > ::iterator it= G[node].begin() ; it !=G[node].end() ; ++it)
		if( !used[*it]) 
			DepthFirstSearch( *it , level +1 );
}

int main ( void )
{
	int i ,x  ;
	long long Answer = 0 ;
	f>>N;
	for( int i(1) ; i < N ; ++i )
	{
		f>>x;
		G[x].push_back(i+1);
	}
	DepthFirstSearch( 1 , 1 );
	for( int i(1) ; i <= N  ; ++i )
	{
		f>>x;
		Answer += x*cost[i];
	}
	g<<Answer<<"\n";
	f.close();
	g.close();
	return 0;
}