Pagini recente » Cod sursa (job #2365710) | Cod sursa (job #2744905) | Cod sursa (job #811336) | Cod sursa (job #781021) | Cod sursa (job #3159753)
//oftica si durere in suflet
#include <fstream>
#include <vector>
#include <climits>
#define ll long long
using namespace std;
//d[i] = sum. max. a unui subgraf din subarborele lui i
//d[i] = suma de max(0, d[copil]) + v[i]
const int NMAX = 16000;
vector <int> g[NMAX + 1];
int d[NMAX + 1];
int v[NMAX + 1];
void dfs(int nod, int parent)
{
d[nod] = 0;
for (int x : g[nod])
if (x != parent)
{
dfs(x, nod);
d[nod] += max(0, d[x]);
}
d[nod] += v[nod];
}
signed main()
{
ifstream cin("asmax.in");
ofstream cout("asmax.out");
int n, i;
cin >> n;
for (i = 1; i <= n; i++)
cin >> v[i];
for (i = 2; i <= n; i++)
{
int a, b;
cin >> a >> b;
g[a].push_back(b);
g[b].push_back(a);
}
dfs(1, 0);
int ans = INT_MIN;
for (i = 1; i <= n; i++)
ans = max(ans, d[i]);
cout << ans;
}