90(
const std::vector<graph_t>& L,
const std::vector<linear_arrangement>& P = {})
93 static_assert(std::is_base_of_v<graphs::graph, graph_t>);
98 assert(P.size() == 0 or L.size() == P.size());
103 typedef std::pair<uint64_t, uint64_t> DD_m;
109 L.begin(), L.end(),
nullptr,
nullptr,
111 [](
const graph_t& G) {
113 sum_edge_lengths(G, linear_arrangement::identity(G.get_num_nodes())),
118 [](uint64_t& total, uint64_t new_value) { total += new_value; },
120 [](uint64_t& total, uint64_t new_value) { total += new_value; },
122 [](uint64_t DDs, std::size_t) {
return DDs; },
124 [](uint64_t num_edges, std::size_t) {
return num_edges; },
126 [](uint64_t DDs, uint64_t sum_num_edges) {
return ratio(DDs, sum_num_edges); }
133 L.begin(), L.end(), P.begin(), P.end(),
135 [](
const graph_t& G,
const ARR& arr) {
136 return DD_m(sum_edge_lengths(G, arr), G.get_num_edges());
139 [](uint64_t& total, uint64_t new_value) { total += new_value; },
141 [](uint64_t& total, uint64_t new_value) { total += new_value; },
143 [](uint64_t DDs, std::size_t) { return DDs; },
145 [](uint64_t num_edges, std::size_t) { return num_edges; },
147 [](uint64_t DDs, uint64_t sum_num_edges) { return ratio(DDs, sum_num_edges); }