File tree Expand file tree Collapse file tree 2 files changed +48
-42
lines changed Expand file tree Collapse file tree 2 files changed +48
-42
lines changed Original file line number Diff line number Diff line change 1
1
#ifndef CP_ALGO_GRAPH_BASE_HPP
2
2
#define CP_ALGO_GRAPH_BASE_HPP
3
+ #include " edge_types.hpp"
3
4
#include " ../data_structures/stack_union.hpp"
4
- #include < iostream>
5
5
#include < ranges>
6
6
#include < vector>
7
7
namespace cp_algo ::graph {
8
- using node_index = int ;
9
8
using edge_index = int ;
10
- struct edge_base {
11
- node_index to;
12
-
13
- edge_base () {}
14
- edge_base (node_index v): to(v) {}
15
-
16
- static auto read (node_index v0 = 0 ) {
17
- node_index u, v;
18
- std::cin >> u >> v;
19
- return std::pair{u - v0, edge_base (v - v0)};
20
- }
21
-
22
- edge_base backedge (int from) const {
23
- return {from};
24
- }
25
- };
26
-
27
- struct weighted_edge : edge_base {
28
- int64_t w;
29
-
30
- weighted_edge () {}
31
- weighted_edge (node_index v, int64_t w): edge_base(v), w(w) {}
32
-
33
- static auto read (node_index v0 = 0 ) {
34
- node_index u, v;
35
- int64_t w;
36
- std::cin >> u >> v >> w;
37
- return std::pair{u - v0, weighted_edge{v - v0, w}};
38
- }
39
-
40
- weighted_edge backedge (node_index from) const {
41
- return {from, w};
42
- }
43
- };
44
-
45
- template <typename edge>
46
- concept edge_type = std::is_base_of_v<edge_base, edge>;
47
- template <typename edge>
48
- concept weighted_edge_type = std::is_base_of_v<weighted_edge, edge>;
49
-
50
9
enum type {directed = 0 , undirected = 1 };
51
10
template <type _undirected, edge_type edge_t = edge_base>
52
11
struct graph {
Original file line number Diff line number Diff line change
1
+ #ifndef CP_ALGO_GRAPH_EDGE_TYPES_HPP
2
+ #define CP_ALGO_GRAPH_EDGE_TYPES_HPP
3
+ #include < iostream>
4
+ #include < cstdint>
5
+ namespace cp_algo ::graph {
6
+ using node_index = int ;
7
+ struct edge_base {
8
+ node_index to;
9
+
10
+ edge_base () {}
11
+ edge_base (node_index v): to(v) {}
12
+
13
+ static auto read (node_index v0 = 0 ) {
14
+ node_index u, v;
15
+ std::cin >> u >> v;
16
+ return std::pair{u - v0, edge_base (v - v0)};
17
+ }
18
+
19
+ edge_base backedge (int from) const {
20
+ return {from};
21
+ }
22
+ };
23
+
24
+ struct weighted_edge : edge_base {
25
+ int64_t w;
26
+
27
+ weighted_edge () {}
28
+ weighted_edge (node_index v, int64_t w): edge_base(v), w(w) {}
29
+
30
+ static auto read (node_index v0 = 0 ) {
31
+ node_index u, v;
32
+ int64_t w;
33
+ std::cin >> u >> v >> w;
34
+ return std::pair{u - v0, weighted_edge{v - v0, w}};
35
+ }
36
+
37
+ weighted_edge backedge (node_index from) const {
38
+ return {from, w};
39
+ }
40
+ };
41
+
42
+ template <typename edge>
43
+ concept edge_type = std::is_base_of_v<edge_base, edge>;
44
+ template <typename edge>
45
+ concept weighted_edge_type = std::is_base_of_v<weighted_edge, edge>;
46
+ }
47
+ #endif // CP_ALGO_GRAPH_EDGE_TYPES_HPP
You can’t perform that action at this time.
0 commit comments