Pagini recente » Cod sursa (job #400595) | Cod sursa (job #2797245) | Cod sursa (job #45695) | Cod sursa (job #2988218) | Cod sursa (job #1233194)
// 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]]) {
dfs(neigh[nod][i]);
if (V[neigh[nod][i]] > 0) {
V[nod]+=V[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);
}
vis[1] = true;
dfs(1);
maxim = V[1];
for (int i=2;i<=n;i++)
if (V[i]>maxim)
maxim = V[i];
g<<maxim<<'\n';
f.close(); g.close();
return 0;
}