This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub luzhiled1333/comp-library
#include "src/graph/class/dynamic-graph.hpp"
DynamicGraph< edge >(usize n)
頂点数 n のグラフを定義する。
n
edge
cost_type
from
to
cost
id
usize size()
グラフの頂点数を返す。
void add_directed_edge(usize from, usize to, cost_type cost = 1)
from から to へのコストcostの有向辺をグラフに追加する。 cost を指定しなかった場合、その辺のコストは 1 になる。
辺には追加された順に 0-indexed で辺番号が割り振られる。
void add_undirected_edge(usize u, usize v, cost_type cost = 1)
u から v へのコスト cost の無向辺をグラフに追加する。 cost を指定しなかった場合、その辺のコストは 1 になる。
u
v
(1) Edges &operator[](const usize &v) (2) const Edges &operator[](const usize &v) const
v を始点とする辺のリストを返す。
#pragma once #include "src/cpp-template/header/size-alias.hpp" #include <cassert> #include <vector> namespace luz { template < typename Edge > class DynamicGraph { using Edges = std::vector< Edge >; protected: std::vector< Edges > g; usize edge_count; public: using cost_type = typename Edge::cost_type; DynamicGraph() = default; explicit DynamicGraph(usize n): g(n), edge_count(0) {} usize size() const { return g.size(); } void add_directed_edge(usize from, usize to, cost_type cost = 1) { assert(from < size()); assert(to < size()); g[from].emplace_back(from, to, cost, edge_count++); } void add_undirected_edge(usize u, usize v, cost_type cost = 1) { assert(u < size()); assert(v < size()); assert(u != v); g[u].emplace_back(u, v, cost, edge_count); g[v].emplace_back(v, u, cost, edge_count++); } Edges operator[](const usize &v) { return g[v]; } const Edges operator[](const usize &v) const { return g[v]; } }; } // namespace luz
#line 2 "src/graph/class/dynamic-graph.hpp" #line 2 "src/cpp-template/header/size-alias.hpp" #include <cstddef> namespace luz { using isize = std::ptrdiff_t; using usize = std::size_t; } // namespace luz #line 4 "src/graph/class/dynamic-graph.hpp" #include <cassert> #include <vector> namespace luz { template < typename Edge > class DynamicGraph { using Edges = std::vector< Edge >; protected: std::vector< Edges > g; usize edge_count; public: using cost_type = typename Edge::cost_type; DynamicGraph() = default; explicit DynamicGraph(usize n): g(n), edge_count(0) {} usize size() const { return g.size(); } void add_directed_edge(usize from, usize to, cost_type cost = 1) { assert(from < size()); assert(to < size()); g[from].emplace_back(from, to, cost, edge_count++); } void add_undirected_edge(usize u, usize v, cost_type cost = 1) { assert(u < size()); assert(v < size()); assert(u != v); g[u].emplace_back(u, v, cost, edge_count); g[v].emplace_back(v, u, cost, edge_count++); } Edges operator[](const usize &v) { return g[v]; } const Edges operator[](const usize &v) const { return g[v]; } }; } // namespace luz