加载中...

并查集模板

import java.util.Scanner;

public class 并查集 {
	static int[] fa; // 数组的大小根据题目大小开,根据元素个数来

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		fa = new int[n + 1];
	}

	/**
	 * 初始化
	 */
	static void init() {
		for (int i = 1; i < fa.length; i++) {
			fa[i] = i;
		}
	}

	/**
	 * 查询(路径压缩后) 必须有,否则爆时间
	 */
	static int findFa(int i) {
		if (fa[i] == i) {// 递归出口,当到达了祖先位置,就返回祖先
			return i;
		} else {
			fa[i] = findFa(fa[i]); // 该步进行了路径压缩
			return fa[i];// 返回父节点
		}
	}

	/**
	 * 合并
	 */
	static void union(int i, int j) {
		int ifa = findFa(i);// 找到 i 的祖先
		int jfa = findFa(j);// 找到 j 的祖先
		fa[ifa] = jfa;// i 的祖先指向 j 的祖先
	}

}

P3367 【模板】并查集 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

posted @ 2023-03-22 20:10  ChuenSan  阅读(15)  评论(0编辑  收藏  举报