Submission #31608

#TimeUsernameProblemLanguageResultExecution timeMemory
31608user202729Beads and wires (APIO14_beads)C++14
28 / 100
223 ms1040 KiB
// https://oj.uz/problem/view/APIO14_beads

#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
//typedef std::pair<int,int> ii;

struct dp{
    int dp0, dp1;
    dp(int dp0, int dp1) : dp0(dp0), dp1(dp1) {};
};

struct edge{
    int vertex, weight;
    edge(int vertex, int weight) : vertex(vertex), weight(weight) {};
};

std::vector<std::vector<edge>> adjlist;
std::vector<int> parent;

dp dfs(int node) {
    int p = parent[node];
    adjlist[node].erase(
        std::remove_if(adjlist[node].begin(), adjlist[node].end(), [p, node](edge x){return x.vertex == parent[node];}),
        adjlist[node].end()
    );
    dp result (0, -9999999);
    for (edge e : adjlist[node]) {
        parent[e.vertex] = node;
        dp tmp = dfs(e.vertex);
        int val = std::max(tmp.dp0, tmp.dp1 + e.weight);
        result.dp0 += val;
        result.dp1 = std::max(result.dp1, e.weight + tmp.dp0 - val);
    }
    result.dp1 += result.dp0;
    return result;
}

int main() {
    int n;
    std::cin >> n;
    adjlist.resize(n);
    for (int i = 1; i < n; ++i) {
        int u, v, val;
        std::cin >> u >> v >> val;
        --u; --v;
        adjlist[u].emplace_back(v, val);
        adjlist[v].emplace_back(u, val);
    }

    std::mt19937 engine ((std::random_device())());
    std::vector<int> roots (n);
    for (int i = 0; i < n; ++i) roots[i] = i;
    std::shuffle(roots.begin(), roots.end(), engine);
    if (roots.size() > 500) roots.resize(500);

    int result = -1;
    for (int root : roots) {
        parent.assign(n, -1);
        auto bkp_adjlist = adjlist;
        result = std::max(result, dfs(root).dp0);
        adjlist = std::move(bkp_adjlist);
    }

    std::cout << result << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...