Pagini recente » Cod sursa (job #1735621) | Cod sursa (job #1943617) | Cod sursa (job #2392816) | Cod sursa (job #1084469) | Cod sursa (job #3145757)
#include <fstream>
#include <unordered_map>
#include <list>
#include <vector>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int N, x, y, ans = -1000000000;
vector<int> s, v;
class Graph {
public:
unordered_map<int, bool> visited;
unordered_map<int, list<int> > adj;
inline void addEdge(int const &u, int const &v);
inline void dfs(int const &node);
};
inline void Graph::addEdge(int const &u, int const &v) {
adj[u].push_back(v);
adj[v].push_back(u);
}
inline void Graph::dfs(int const &node) {
visited[node] = true;
s[node] = v[node];
for (auto u : adj[node])
if (!visited[u]) {
dfs(u);
if (s[u] > 0)
s[node] += s[u];
}
ans = max(ans, s[node]);
}
Graph g;
int main() {
fin >> N;
s.resize(N + 1);
v.resize(N + 1);
for (int i = 1; i <= N; i++) {
fin >> v[i];
ans = max(ans, v[i]);
}
while (fin >> x >> y)
g.addEdge(x, y);
g.dfs(1);
fout << ans << '\n';
fin.close();
fout.close();
return 0;
}