Cod sursa(job #1199953)

Utilizator IonMosnoiIon Mosnoi IonMosnoi Data 21 iunie 2014 12:40:58
Problema Asmax Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
ifstream f("asmax.in");
ofstream o("asmax.out");
vector <int> a[20000];
int v[20000],m,n,parc[20000],maxim=-100000000,sus[20000],jos[20000];
void df(int nod){
	parc[nod]=1;
	jos[nod] = v[nod];
	  for(int i=0;i<a[nod].size();i++)if(parc[a[nod][i]]!=1){
	  	df(a[nod][i]);
	  	jos[nod]+=jos[a[nod][i]];
	  }
	  maxim = max(maxim,jos[nod]);
	  
	parc[nod]=0;
}
void df1(int nod){
		parc[nod]=1;
		
	  for(int i=0;i<a[nod].size();i++)
	  if(parc[a[nod][i]]!=1){	  	
	  	sus[a[nod][i]] = sus[nod] + jos[nod]  - jos[a[nod][i]] + v[a[nod][i]];
	  	maxim = max(maxim,sus[a[nod][i]]);
	 // 	o<<maxim<<" " <<a[nod][i]<<endl;
	  	df1(a[nod][i]);
	  }
	parc[nod]=0;
}
int main(){
	f>>n;
	for(int i=1;i<=n;i++)f>>v[i],sus[i]=jos[i]=0;
	int x,y;
	for(int i=1;i<n;i++){
		f>>x>>y;
		a[x].push_back(y);
		a[y].push_back(x);
	}
	df(1);
	df1(1);
	o<<maxim;
}