Pagini recente » Rezultatele filtrării | Borderou de evaluare (job #558557) | Rezultatele filtrării | Istoria paginii utilizator/vlademan | 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;
}