/** * The `QuickUnionUF` class represents a union–find data type * (also known as the disjoint-sets data type). * It supports the classic union and find operations, * along with a count operation that returns the total number * of sets. *
* The union-find data type models a collection of sets containing * n elements, with each element in exactly one set. * The elements are named 0 through n–1. * Initially, there are n sets, with each element in its * own set. The cannonical elemement of a set * (also known as the root, identifier, * leader, or set representative) * is one distinguished element in the set. Here is a summary of * the operations: *
* The canonical element of a set can change only when the set * itself changes during a call to union—it cannot * change during a call to either find or count. *
* This implementation uses quick union. * The constructor takes Θ(n) time, where * n is the number of sites. * The union and find operations take * Θ(n) time in the worst case. * The count operation takes Θ(1) time. *
* For alternative implementations of the same API, see
* {@link UF}, {@link QuickFindUF}, and {@link WeightedQuickUnionUF}.
* For additional documentation,
* see Section 1.5 of
* Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne.
*/
export default class QuickUnionUF {
private parent;
private __count;
constructor(n: number);
/**
* Returns the number of components.
*
* @return the number of components (between `1` and `n`)
*/
count(): number;
/**
* Returns the component identifier for the component containing site `p`.
*
* @param p the integer representing one object
* @return the component identifier for the component containing site `p`
* @throws IllegalArgumentException unless `0 <= p < n`
*/
find(p: number): number;
private validate;
/**
* Returns true if the the two sites are in the same component.
*
* @param p the integer representing one site
* @param q the integer representing the other site
* @return `true` if the two sites `p` and `q` are in the same component;
* `false` otherwise
* @throws IllegalArgumentException unless
* both `0 <= p < n` and `0 <= q < n`
*/
connected(p: number, q: number): boolean;
/**
* Merges the component containing site `p` with the
* the component containing site `q`.
*
* @param p the integer representing one site
* @param q the integer representing the other site
* @throws IllegalArgumentException unless
* both `0 <= p < n` and `0 <= q < n`
*/
union(p: number, q: number): void;
/**
* Reads in a sequence of pairs of integers (between 0 and n-1) from standard input,
* where each integer represents some object;
* if the sites are in different components, merge the two components
* and print the pair to standard output.
*
* @param args the command-line arguments
*/
static main(): Promise