Implementación de Union Find [algoritmo de aprendizaje]
Prefacio
2023-9-26 14:38:02
El siguiente contenido es de "[Algoritmo de aprendizaje]"
y está destinado únicamente a fines de aprendizaje y comunicación.
derechos de autor
Elimine las siguientes palabras cuando publique en otras plataformas.
Este artículo se publicó por primera vez en la plataforma CSDN.
El autor es CSDN@日星月云.
La página de inicio del blog es https://blog.csdn.net/qq_51625007
. Elimine las siguientes palabras palabras anteriores al publicar en otras plataformas.
recomendar
Explicación del algoritmo 056 [Obligatorio] Búsqueda de sindicatos - Parte 1
Implementación de búsqueda sindical
Implementación de búsqueda sindical
package test1;// 并查集模版(牛客)
// 路径压缩 + 小挂大
// 测试链接 : https://www.nowcoder.com/practice/e7ed657974934a30b2010046536a5372
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下的code,提交时请把类名改成"Main",可以直接通过
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
class Code01_UnionFindNowCoder {
public static int MAXN = 1000001;
public static int[] father = new int[MAXN];
public static int[] size = new int[MAXN];
public static int[] stack = new int[MAXN];
public static int n;
public static void build() {
for (int i = 0; i <= n; i++) {
father[i] = i;
size[i] = 1;
}
}
// i号节点,往上一直找,找到代表节点返回!
public static int find(int i) {
// 沿途收集了几个点
int size = 0;
while (i != father[i]) {
stack[size++] = i;
i = father[i];
}
// 沿途节点收集好了,i已经跳到代表节点了
while (size > 0) {
father[stack[--size]] = i;
}
return i;
}
public static boolean isSameSet(int x, int y) {
return find(x) == find(y);
}
public static void union(int x, int y) {
int fx = find(x);
int fy = find(y);
if (fx != fy) {
// fx是集合的代表:拿大小
// fy是集合的代表:拿大小
if (size[fx] >= size[fy]) {
size[fx] += size[fy];
father[fy] = fx;
} else {
size[fy] += size[fx];
father[fx] = fy;
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StreamTokenizer in = new StreamTokenizer(br);
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
while (in.nextToken() != StreamTokenizer.TT_EOF) {
n = (int) in.nval;
build();
in.nextToken();
int m = (int) in.nval;
for (int i = 0; i < m; i++) {
in.nextToken();
int op = (int) in.nval;
in.nextToken();
int x = (int) in.nval;
in.nextToken();
int y = (int) in.nval;
if (op == 1) {
out.println(isSameSet(x, y) ? "Yes" : "No");
} else {
union(x, y);
}
}
}
out.flush();
out.close();
br.close();
}
}
por fin
Todos tenemos un futuro brillante
Les deseo todo lo mejor en sus exámenes de ingreso a posgrado, les deseo todo el éxito
en su trabajo, les deseo a todos lo que desean, me gusta, recopila y sigue.