zawatins-library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub zawa-tin/zawatins-library

:heavy_check_mark: test/Dijkstra2.test.cpp

Depends on

Code

#define PROBLEM "https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/1/ITP1_1_A"

#include "../src/graph/Dijkstra.hpp"

#include <iostream>

int main() {
    // int n, m; std::cin >> n >> m;
    // zawa::Dijkstra<long long> da(n);
    // for (int i = 0 ; i < m ; i++) {
    //     int a, b; std::cin >> a >> b;
    //     long long c; std::cin >> c;
    //     da.add_edge(a - 1, b - 1, c);
    //     da.add_edge(b - 1, a - 1, c);
    // }
    // da.build(0);
    // std::vector ans(0, 0);
    // for (int i = 1 ; i < n ; i++) {
    //     ans.emplace_back(da.get_route(i) / 2);
    // }
    // for (size_t i = 0 ; i < ans.size() ; i++) {
    //     std::cout << ans[i] + 1 << (i == ans.size() - 1 ? '\n' : ' ');
    // }
    std::cout << "Hello World" << std::endl;
}

/*
 * AtCoder Begginer Contest 252 - E Road Reduction
 * https://atcoder.jp/contests/abc252/submissions/36151858
 */
#line 1 "test/Dijkstra2.test.cpp"
#define PROBLEM "https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/1/ITP1_1_A"

#line 2 "src/graph/Dijkstra.hpp"

#include <vector>
#include <queue>
#include <utility>
#include <limits>

namespace zawa {

template <class COST>
class Dijkstra {
public:
    Dijkstra(std::size_t n) 
        : G(n) 
        , dist(n, _inf) 
        , prevs(n, -1) 
        , route(n, -1) {}

    struct edge {
        int from, to;
        COST cost;
    };

    int add_edge(int from, int to, COST cost) {
        int res = (int)edges.size();
        edges.push_back({ from, to, cost });
        G[from].emplace_back(res);
        return res;
    }

    edge get_edge(int id) {
        return edges[id];
    }

    void build(int s) {
        using pci = std::pair<COST, int>;
        dist[s] = 0;
        std::priority_queue<pci, std::vector<pci>, std::greater<pci>> que;
        que.emplace(0, s);
        while (que.size()) {
            auto [d, v] = que.top();
            que.pop();
            if (dist[v] < d) {
                continue;
            }
            for (auto id : G[v]) {
                edge e = edges[id];
                if (dist[e.to] > d + e.cost) {
                    dist[e.to] = d + e.cost;
                    prevs[e.to] = v;
                    route[e.to] = id;
                    que.emplace(dist[e.to], e.to);
                }
            }
        }
    }

    COST inf() {
        return _inf;
    }

    COST get_dist(int v) {
        return dist[v];
    }

    int get_prev(int v) {
        return prevs[v];
    }

    int get_route(int v) {
        return route[v];
    }

private:
    static constexpr COST _inf = std::numeric_limits<COST>::max();
    std::vector<edge> edges;
    std::vector<std::vector<int>> G; 
    std::vector<COST> dist;
    std::vector<int> prevs;
    std::vector<int> route;
};

} // namespace zawa
#line 4 "test/Dijkstra2.test.cpp"

#include <iostream>

int main() {
    // int n, m; std::cin >> n >> m;
    // zawa::Dijkstra<long long> da(n);
    // for (int i = 0 ; i < m ; i++) {
    //     int a, b; std::cin >> a >> b;
    //     long long c; std::cin >> c;
    //     da.add_edge(a - 1, b - 1, c);
    //     da.add_edge(b - 1, a - 1, c);
    // }
    // da.build(0);
    // std::vector ans(0, 0);
    // for (int i = 1 ; i < n ; i++) {
    //     ans.emplace_back(da.get_route(i) / 2);
    // }
    // for (size_t i = 0 ; i < ans.size() ; i++) {
    //     std::cout << ans[i] + 1 << (i == ans.size() - 1 ? '\n' : ' ');
    // }
    std::cout << "Hello World" << std::endl;
}

/*
 * AtCoder Begginer Contest 252 - E Road Reduction
 * https://atcoder.jp/contests/abc252/submissions/36151858
 */
Back to top page