Pagini recente » Cod sursa (job #784137) | Cod sursa (job #1866716) | Cod sursa (job #1228134) | Cod sursa (job #93023) | Cod sursa (job #1233191)
// Craciun Catalin
// Asmax
// Infoarena
#include <iostream>
#include <fstream>
#include <vector>
#define NMax 20000
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
int n;
int V[NMax]; // Values
bool vis[NMax]; // Visited
vector<int> neigh[NMax]; // Neighboors
int maxim = 0;
bool found = false;
void dfs(int nod) {
vis[nod] = true;
for (unsigned int i=0;i<neigh[nod].size();i++) {
if (!vis[neigh[nod][i]]) {
if (V[neigh[nod][i]] > 0) {
V[nod]+=V[neigh[nod][i]];
dfs(neigh[nod][i]);
}
}
}
}
int main() {
f>>n;
for (int i=1;i<=n;i++) {
f>>V[i];
}
for (int i=1;i<=n-1;i++) {
int x, y;
f>>x>>y;
neigh[x].push_back(y);
neigh[y].push_back(x);
}
for (int i=1;i<=n;i++) {
if (!vis[i]) {
dfs(i);
if (!found) {
maxim = V[i];
found = true;
} else if (maxim < V[i])
maxim = V[i];
}
}
g<<maxim<<'\n';
f.close(); g.close();
return 0;
}