Pagini recente » Cod sursa (job #742002) | Cod sursa (job #1271007) | Cod sursa (job #1853587) | Cod sursa (job #930596) | Cod sursa (job #880487)
Cod sursa(job #880487)
#include<fstream>
#include<vector>
using namespace std;
const int Nmax = 16009;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int N; int SumMax[Nmax]; int Val[Nmax]; bool s[Nmax];int ValNod = -1000000;
vector<int> G[Nmax];
void Read() {
fin >> N;
for(int i = 1; i <= N ; ++i)
fin >> Val[i], SumMax[i] = Val[i], ValNod = max(Val[i], ValNod);
for(int i = 1; i < N; ++i){
int X , Y; fin >> X >> Y;
G[X].push_back(Y);
G[Y].push_back(X);
}
}
void BFS(int X){
s[X] = true;
for(int i = 0 ;i < G[X].size(); ++i){
int Y = G[X][i];
if(s[Y] == false){
BFS(Y);
SumMax[X] = max(SumMax[Y] + Val[X], max( max(0 ,SumMax[X]), SumMax[X] + SumMax[Y]));
}
}
}
int main(){
Read ();
BFS(1);
int ValMax = -100000;
for(int i = 1; i <= N; ++i)
if(ValMax < SumMax[i])
ValMax = SumMax[i];
fout << max(ValMax, ValNod);
return 0;
}