Cod sursa(job #3145757)

Utilizator patrick_burasanPatrick Burasan patrick_burasan Data 16 august 2023 22:06:17
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#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;
}