Pagini recente » Cod sursa (job #1575520) | Cod sursa (job #2915568) | Cod sursa (job #361433) | Cod sursa (job #1970747) | Cod sursa (job #3208409)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int nmax = 16001;
vector<int>g[nmax];
long long val[nmax];
long long s[nmax];
int f[nmax];
void dfs(int node)
{
f[node] = 1;
s[node] += val[node];
for(int i = 0; i < g[node].size(); i++)
{
int vecin = g[node][i];
if(f[vecin] == 0)
dfs(vecin);
}
}
int main()
{
int n;
in>>n;
long long stotal = 0;
for(int i = 1; i <= n; i++)
{
in>>val[i];
stotal += val[i];
}
for(int i = 1; i <= n - 1; i++)
{
int a,b;
in>>a>>b;
g[a].push_back(b);
g[b].push_back(a);
}
dfs(1);
int mini = 0;
for(int i = 1; i <= n; i++)
if(s[i] < 0 && mini > s[i])
mini = s[i];
out<<stotal - mini;
return 0;
}