Skip to content

Commit 4ae7587

Browse files
committed
Use reserve in incidence lists
1 parent fec4131 commit 4ae7587

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

cp-algo/data_structures/stack_union.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ namespace cp_algo::data_structures {
1919
data.emplace_back(std::forward<Args...>(vdata...));
2020
}
2121

22+
void reserve(int m) {
23+
data.reserve(m);
24+
next.reserve(m);
25+
}
26+
2227
size_t size() const {return std::size(head);}
2328
size_t nodes() const {return std::size(data);}
2429

cp-algo/graph/base.hpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,26 @@ namespace cp_algo::graph {
1010
template<type _undirected, edge_type edge_t = edge_base>
1111
struct graph {
1212
static constexpr bool undirected = _undirected;
13-
graph(int n, int v0 = 0): v0(v0), _adj(n) {}
13+
graph(int n, int v0 = 0): v0(v0), adj(n) {}
1414

1515
void add_edge(node_index u, edge_t e) {
16-
_adj.push(u, size(edges));
16+
adj.push(u, size(edges));
1717
edges.push_back(e);
1818
if constexpr (undirected) {
19-
_adj.push(e.to, size(edges));
19+
adj.push(e.to, size(edges));
2020
}
2121
edges.push_back(e.backedge(u));
2222
}
2323
void read_edges(node_index m) {
24+
adj.reserve(m);
2425
for(edge_index i = 0; i < m; i++) {
2526
auto [u, e] = edge_t::read(v0);
2627
add_edge(u, e);
2728
}
2829
}
2930
void call_adjacent(node_index v, auto &&callback, auto &&terminate) const {
30-
for(int sv = _adj.head[v]; sv && !terminate(); sv = _adj.next[sv]) {
31-
callback(_adj.data[sv]);
31+
for(int sv = adj.head[v]; sv && !terminate(); sv = adj.next[sv]) {
32+
callback(adj.data[sv]);
3233
}
3334
}
3435
void call_adjacent(node_index v, auto &&callback) const {
@@ -48,14 +49,14 @@ namespace cp_algo::graph {
4849
[](edge_index e) {return !(e % 2);}
4950
);
5051
}
51-
auto const& incidence_lists() const {return _adj;}
52+
auto const& incidence_lists() const {return adj;}
5253
edge_t const& edge(edge_index e) const {return edges[e];}
53-
node_index n() const {return _adj.size();}
54+
node_index n() const {return adj.size();}
5455
edge_index m() const {return size(edges) / 2;}
5556
private:
5657
node_index v0;
5758
std::vector<edge_t> edges;
58-
data_structures::stack_union<edge_index> _adj;
59+
data_structures::stack_union<edge_index> adj;
5960
};
6061
}
6162
#endif // CP_ALGO_GRAPH_BASE_HPP

0 commit comments

Comments
 (0)