Cod sursa(job #1199961)

Utilizator IonMosnoiIon Mosnoi IonMosnoi Data 21 iunie 2014 12:56:00
Problema Asmax Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 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];
	maxim = max(maxim,jos[nod]);
	  for(int i=0;i<a[nod].size();i++)if(parc[a[nod][i]]!=1){
	  	df(a[nod][i]);
	  	if(jos[a[nod][i]]>0)
	  	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]   + v[a[nod][i]];
	  	if(jos[a[nod][i]]>0)sus[a[nod][i]]-= jos[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;
}