Pagini recente » Cod sursa (job #3121888) | Cod sursa (job #1446221) | Cod sursa (job #1452633) | Cod sursa (job #1318317) | Cod sursa (job #2671172)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <limits.h>
#include <algorithm>
using namespace std;
const int N = 16005;
int n;
vector<int> graf[N];
int cost[N];
int sp[N];
bool amfost[N];
int dfs(int nod) {
int sum = 0;
amfost[nod] = true;
for (int i = 0; i < (int)graf[nod].size(); ++i) {
if(amfost[graf[nod][i]] == false)
sum += dfs(graf[nod][i]) + cost[graf[nod][i]];
}
amfost[nod] = false;
return sum;
}
int main() {
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n;
fin >> n;
for (int i = 1; i <= n; ++i)
fin >> cost[i];
for (int i = 1; i < n; ++i) {
int a, b;
fin >> a >> b;
graf[a].push_back(b);
graf[b].push_back(a);
}
int maxx = INT_MIN;
for (int i = 1; i<= n; ++i) {
int sum = max(dfs(i), dfs(i) + cost[i]);
maxx = max(maxx, sum);
//cout << dfs(i) << '\n';
}
fout << maxx << '\n';
return 0;
}