tuple<ve, ValueT> solve(ve& edges, int nodes) { sort(edges.begin(), edges.end(), edge_compare); ve tree; DisjointSet ds(nodes); ValueT sum = 0; for (Edge e : edges) { if (!ds.sameSet(e.u, e.v)) { ds.join(e.u, e.v); tree.push_back(e); sum += e.w; } else if (tree.size() == nodes - 1) { break; } } return tuple<ve, ValueT>{tree, sum}; }