CP-Algorithms Library

This documentation is automatically generated by competitive-verifier/competitive-verifier

View the Project on GitHub cp-algorithms/cp-algorithms-aux

:heavy_check_mark: Tree Diameter (SPFA) (verify/graph/tree_diameter_spfa.test.cpp)

Depends on

Code

// @brief Tree Diameter (SPFA)
#define PROBLEM "https://judge.yosupo.jp/problem/tree_diameter"
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")
#include <iostream>
//#include "blazingio/blazingio.min.hpp"
#include "cp-algo/graph/shortest_path.hpp"
#include <bits/stdc++.h>

using namespace std;
using namespace cp_algo::graph;

template<weighted_undirected_graph_type graph>
std::tuple<int64_t, node_index, cp_algo::big_vector<edge_index>> tree_diameter(graph const& g) {
    auto [d1, _] = spfa(g, 0);
    node_index s = 0;
    for(auto v: g.nodes()) {
        if (d1[v] > d1[s]) {
            s = v;
        }
    }
    auto [d2, pre] = spfa(g, s);
    node_index t = 0;
    for(auto v: g.nodes()) {
        if (d2[v] > d2[t]) {
            t = v;
        }
    }
    return {d2[t], s, recover_path(g, pre, s, t)};
}

void solve() {
    int n;
    cin >> n;
    weighted_graph g(n);
    g.read_edges(n - 1);
    auto [d, v, path] = tree_diameter(g);
    cout << d << ' ' << size(path) + 1 << '\n';
    cout << v;
    for(auto e: path) {
        v = g.edge(e).traverse(v);
        cout << ' ' << v;
    }
    cout << "\n";
}

signed main() {
    //freopen("input.txt", "r", stdin);
    ios::sync_with_stdio(0);
    cin.tie(0);
    int t = 1;
    //cin >> t;
    while(t--) {
        solve();
    }
}
Traceback (most recent call last):
  File "/home/runner/.local/lib/python3.12/site-packages/competitive_verifier/oj_resolve/resolver.py", line 181, in resolve
    bundled_code = language.bundle(path, basedir=basedir)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.local/lib/python3.12/site-packages/competitive_verifier/oj/verify/languages/cplusplus.py", line 252, in bundle
    bundler.update(path)
  File "/home/runner/.local/lib/python3.12/site-packages/competitive_verifier/oj/verify/languages/cplusplus_bundle.py", line 327, in update
    assert len(lines) == len(uncommented_lines)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError

Test cases

Env Name Status Elapsed Memory
g++ example_00 :heavy_check_mark: AC 5 ms 4 MB
g++ hack_00 :heavy_check_mark: AC 4 ms 4 MB
g++ line_00 :heavy_check_mark: AC 189 ms 45 MB
g++ max_random_00 :heavy_check_mark: AC 231 ms 41 MB
g++ max_random_01 :heavy_check_mark: AC 252 ms 42 MB
g++ random_00 :heavy_check_mark: AC 178 ms 35 MB
g++ random_01 :heavy_check_mark: AC 199 ms 39 MB
g++ random_02 :heavy_check_mark: AC 27 ms 7 MB
g++ random_03 :heavy_check_mark: AC 182 ms 37 MB
g++ random_04 :heavy_check_mark: AC 118 ms 28 MB
g++ small_random_00 :heavy_check_mark: AC 5 ms 4 MB
g++ small_random_01 :heavy_check_mark: AC 4 ms 4 MB
g++ small_random_02 :heavy_check_mark: AC 4 ms 4 MB
g++ small_random_03 :heavy_check_mark: AC 4 ms 4 MB
g++ small_random_04 :heavy_check_mark: AC 4 ms 4 MB
g++ uni_00 :heavy_check_mark: AC 142 ms 43 MB
Back to top page