Pagini recente » Cod sursa (job #581979) | Cod sursa (job #1378177) | Cod sursa (job #2959831) | Cod sursa (job #2356098) | Cod sursa (job #2188058)
#include <fstream>
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
vector<int> graph[16001];
int N,x,y,maxi=-INT_MAX;
int v[160001],dp[160001];
int visited[160001];
int max(int a,int b) {
return a>b?a:b;
}
void DFS_VISIT(int u) {
dp[u]=v[u];
visited[u]=1;
for (unsigned int x=0;x<graph[u].size();x++) {
if (!visited[graph[u][x]]) {
DFS_VISIT(graph[u][x]);
dp[u]=max(dp[u],dp[u]+dp[graph[u][x]]);
}
}
}
void DFS() {
for (int i=1;i<=N;i++)
if (!visited[i])
DFS_VISIT(i);
}
int main() {
in>>N;
for (int i=1;i<=N;i++) {
in>>v[i];
visited[i]=0;
}
for (int i=0;i<N-1;i++) {
in>>x>>y;
graph[x].push_back(y);
graph[y].push_back(x);
}
DFS();
for (int i=1;i<=N;i++)
if (maxi<dp[i])
maxi=dp[i];
out<<maxi;
in.close();
out.close();
return 0;
}