Pagini recente » Cod sursa (job #1737119) | Cod sursa (job #2193054) | Cod sursa (job #1916589) | Cod sursa (job #297795) | Cod sursa (job #2947189)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
vector<int> G[16005];
int n, v[16005], viz[16005], vmax=-1005;
void citire() {
fin>>n;
for (int i=0; i<n; i++)
fin>>v[i];
int x, y;
for (int i=0; i<n-1; i++) {
fin>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
}
int dfs(int k) {
viz[k]=1;
int sum=v[k-1];
for (auto &i: G[k])
if (!viz[i])
sum=max(sum, sum+dfs(i));
if (sum>vmax)
vmax=sum;
return sum;
}
int nodmax() {
int nmax=-1005;
for (int i=0; i<n; i++)
if (v[i]>v[nmax])
nmax=i;
return nmax;
}
int main() {
citire();
fout<<dfs(nodmax());
return 0;
}