Pagini recente » Cod sursa (job #2092134) | Cod sursa (job #1379964) | Cod sursa (job #1086056) | Cod sursa (job #2806768) | Cod sursa (job #2990844)
///Asmax
#include<fstream>
#include<vector>
using namespace std;
ifstream cin("asmax.in");
ofstream cout("asmat.out");
const int N=16000;
int v[N+1];
int dp[N+1]; /// dp[a] suma max a unui arbore cu radacina in a
bool viz[N+1];
vector<int> g[N+1];
void dfs(int x)
{
viz[x]=true;
dp[x]=v[x];
for(auto y: g[x])
{
if(!viz[y])
{
dfs(y);
if(dp[y] > 0)
dp[x]+=dp[y];
}
}
}
int main()
{
int n;
cin >> n;
for(int i=1; i<=n; i++)
{
cin >> v[i];
}
for(int i=1; i<=n-1; i++)
{
int a, b;
cin >> a >> b;
g[b].push_back(a);
g[a].push_back(b);
}
dfs(1);
int maxim=-2e9;
for(int i=1; i<=n; i++)
{
maxim=max(maxim, dp[i]);
}
cout << maxim;
return 0;
}