Pagini recente » Cod sursa (job #2785512) | Cod sursa (job #841747) | Cod sursa (job #1871726) | Cod sursa (job #2067360) | Cod sursa (job #2780757)
#include <fstream>
#include <vector>
#include <climits>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
vector<vector<int>> adj;
vector<int> cost,visited,dp;
int s=0;
void dfs(int u)
{
visited[u]=true;
dp[u]=cost[u];
for(int v:adj[u])
{
if(visited[v]==false) {
dfs(v);
dp[u] = max(dp[u], dp[u] + dp[v]);
}
}
}
int main() {
int n,a,b;
in>>n;
adj.resize(n+1);
cost.resize(n+1);
dp.resize(n+1,0);
visited.resize(n+1);
for(int i=1;i<=n;i++)
in>>cost[i];
for(int i=1;i<=n-1;i++)
{
in>>a>>b;
adj[a].push_back(b);
adj[b].push_back(a);
}
dfs(1);
int maxi=INT_MIN;
for(int i=1;i<=n;i++)
{
maxi=max(maxi,dp[i]);
}
out<<maxi;
return 0;
}