+/**
+ * Merge neighbors into the given node.
+ */
+void apply_RM(pbqp *pbqp, pbqp_node *node)
+{
+ pbqp_edge **edges;
+ unsigned edge_index;
+ unsigned edge_len;
+
+ assert(node);
+ assert(pbqp);
+
+ edges = node->edges;
+ edge_len = pbqp_node_get_degree(node);
+
+ /* Check all incident edges. */
+ for (edge_index = 0; edge_index < edge_len; ++edge_index) {
+ pbqp_edge *edge = edges[edge_index];
+
+ insert_into_rm_bucket(edge);
+ }
+
+ /* ALAP: Merge neighbors into given node. */
+ while(edge_bucket_get_length(rm_bucket) > 0) {
+ pbqp_edge *edge = edge_bucket_pop(&rm_bucket);
+ assert(edge);
+
+ if (edge->src == node)
+ merge_target_into_source(pbqp, edge);
+ else
+ merge_source_into_target(pbqp, edge);
+ }
+}
+