union.cpp

来自「一些重要的数据结构」· C++ 代码 · 共 16 行

CPP
16
字号
int		set[maxn],rank[maxn];
void	newset(int n){ for(i=0; i<n; i++) set[i]=i; }
int		find(int i){
		int j, k, t;
		for (k=i; set[k]!=k; k=set[k]);
		for (j=i; j!=k; j=t){ t = set[j]; set[j] = k; }
		return k;
}
void	join(int i, int j){
		i = find(i); j = find(j);
		if (i==j) return;		
		if (rank[i]<=rank[j]){
			set[i] = j;
			if (rank[i]==rank[j]) rank[j]++;
		} else set[j] = i;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?