24 #include "disjoint-set.h"
27 #define THRESHOLD(size, c) (c/size)
34 bool operator<(
const edge &a,
const edge &b) {
48 universe *segment_graph(
int num_vertices,
int num_edges, edge *edges,
51 std::sort(edges, edges + num_edges);
54 universe *u =
new universe(num_vertices);
57 float *threshold =
new float[num_vertices];
58 for (
int i = 0; i < num_vertices; i++)
59 threshold[i] = THRESHOLD(1,c);
62 for (
int i = 0; i < num_edges; i++) {
63 edge *pedge = &edges[i];
66 int a = u->find(pedge->a);
67 int b = u->find(pedge->b);
69 if ((pedge->w <= threshold[a]) &&
70 (pedge->w <= threshold[b])) {
73 threshold[a] = pedge->w + THRESHOLD(u->size(a), c);