/**
 * 2-way Fiduccia–Mattheyses cut refinement (single-constraint, cut objective).
 *
 * Maintains two max-heaps keyed by per-vertex gain (`external_degree − internal_degree`),
 * one per side of the bisection. Each pass:
 *   1. Insert every boundary vertex into the queue for its current side.
 *   2. Repeatedly pop from whichever side is more overweight, move the vertex,
 *      and update neighbours. Track running cut and remember the best snapshot.
 *   3. Stop when both queues drain, or when `LIMIT_NONIMPROVING_MOVES` moves
 *      pass without finding a better cut.
 *   4. Roll back any moves made after the best-cut snapshot.
 *
 * Each vertex is locked after moving once (it can't move back in the same pass).
 * Locking is reset between passes.
 *
 * Mirrors `FM_2WayCutRefine` from libmetis/fm.c.
 *
 * All scratch state (heaps, moved-index, swap history, insertion order) is
 * shared via the `BisectionScratch` passed in by the caller, sized to the
 * coarsest graph's vertex_count. This eliminates per-trial allocation.
 *
 * @param {import('../MetisGraph.js').MetisGraph} graph
 * @param {number} target_weight_for_partition_0
 * @param {number} pass_count
 * @param {function():number} random seeded RNG used to shuffle boundary
 *   insertion order so ties break differently each pass
 * @param {import('./BisectionScratch.js').BisectionScratch} scratch
 */
export function fm_2way(graph: import('../MetisGraph.js').MetisGraph, target_weight_for_partition_0: number, pass_count: number, random: () => number, scratch: import('./BisectionScratch.js').BisectionScratch): void;
//# sourceMappingURL=fm_2way.d.ts.map