Pagini recente » Autentificare | Cod sursa (job #1285374) | Cod sursa (job #2565881) | Cod sursa (job #1547860) | Cod sursa (job #577895)
Cod sursa(job #577895)
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
fstream fin ("asmax.in", ios::in);
fstream fout ("asmax.out", ios::out);
#define max(a, b) (((a) > (b)) ? (a) : (b))
#define MAXN 16010
#define MIN -1e9
vector <int> G[MAXN];
bitset <MAXN> viz;
typedef vector <int>::iterator iter;
int n, best[MAXN], bst = MIN;
void dfs (int n)
{
viz[n] = true;
for (iter it = G[n].begin (); it != G[n].end (); ++it) {
if (!viz[*it]) {
dfs (*it);
if (best[*it] > 0) {
best[n] += best[*it];
bst = max(bst, best[n]);
}
}
}
}
int main ()
{
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> best[i];
}
for (int i = 2, a, b; i <= n; ++i) {
fin >> a >> b;
G[a].push_back (b);
G[b].push_back (a);
}
dfs (1);
fout << bst << endl;
fin.close ();
fout.close ();
return 0;
}