Cod sursa(job #2199653)

Utilizator MateiTrandafirMatei Trandafir MateiTrandafir Data 28 aprilie 2018 17:09:16
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>

#define N 100001
#define M 200001

int n, nr, nodes[2 * M], next[2 * M], list[M], v[N], r = -1000;
bool vis[N];

inline void add(int from, int to) {
    ++nr;
    nodes[nr] = to;
    next[nr] = list[from];
    list[from] = nr;
}

inline int dfs(int x) {
    if (vis[x]) return 0;
    vis[x] = true;
    int p = list[x];
    int t;
    while (p != 0) {
        t = dfs(nodes[p]);
        if (t > 0) v[x] += t;
        p = next[p];
    }
    if (v[x] > r) r = v[x];
    return v[x];
}

int main() {
    std::ifstream in("asmax.in");
    std::ofstream out("asmax.out");
    in >> n;
    int x, y;
    for (int i = 1; i <= n; ++i) {
        in >> v[i];
    }
    for (int i = 1; i < n; ++i) {
        in >> x >> y;
        add(x, y);
        add(y, x);
    }
    dfs(1);
    out << r;
    return 0;
}