Pagini recente » Cod sursa (job #2744270) | Cod sursa (job #402310) | Cod sursa (job #2120005) | Cod sursa (job #228610) | Cod sursa (job #953461)
Cod sursa(job #953461)
#include <fstream>
#include <vector>
using namespace std;
vector<int> L[20000];
int v[20000], c[20000], s[20000];
int n, x, y, maxim, i;
using namespace std;
void dfs(int x) {
v[x] = 1;
int sum = c[x];
for (int i=0;i<L[x].size();i++) {
if (v[ L[x][i] ] ==0) {
dfs(L[x][i]);
if (s[L[x][i]] > 0)
sum += s[L[x][i]];
}
}
if (sum > c[x])
s[x] = sum;
else
s[x] = c[x];
if (s[x] > maxim)
maxim = s[x];
}
int main () {
ifstream fin("asmax.in");
ofstream fout("asmax.out");
fin>>n;
for (i=1;i<=n;i++)
fin>>c[i];
for (i=1;i<n;i++) {
fin>>x>>y;
L[x].push_back(y);
L[y].push_back(x);
}
maxim = -(1<<30);
dfs(1);
fout<<maxim<<"\n";
return 0;
}