File tree Expand file tree Collapse file tree 1 file changed +75
-0
lines changed Expand file tree Collapse file tree 1 file changed +75
-0
lines changed Original file line number Diff line number Diff line change @@ -176,6 +176,81 @@ int main() {
176176
177177### Java
178178
179+ ```java
180+ import java.util.Scanner;
181+
182+ public class Main {
183+ private static int[] father;
184+
185+ public static void main(String[] args) {
186+ Scanner scanner = new Scanner(System.in);
187+ int pointNum = scanner.nextInt();
188+ father = new int[pointNum + 1];
189+ init();
190+ for (int i = 0; i < pointNum; i++) {
191+ join(scanner.nextInt(), scanner.nextInt());
192+ }
193+ }
194+
195+ /**
196+ * 并查集初始化
197+ */
198+ private static void init() {
199+ for (int i = 1; i < father.length; i++) {
200+ // 让每个元素指向自己
201+ father[i] = i;
202+ }
203+ }
204+
205+ /**
206+ * 并查集寻根
207+ *
208+ * @param u
209+ * @return
210+ */
211+ private static int find(int u) {
212+ // 判断 u 是否等于自己,如果是的话,直接返回自己
213+ // 如果不等于自己,就寻找根,寻找的时候,反复进行路径压缩
214+ return u == father[u] ? u : (father[u] = find(father[u]));
215+ }
216+
217+ /**
218+ * 判断 u 和 v 是否同根
219+ *
220+ * @param u
221+ * @param v
222+ * @return
223+ */
224+ private static boolean isSame(int u, int v) {
225+ return find(u) == find(v);
226+ }
227+
228+ /**
229+ * 添加 边 到并查集,v 指向 u
230+ *
231+ * @param u
232+ * @param v
233+ */
234+ private static void join(int u, int v) {
235+ // --if-- 如果两个点已经同根,说明他们的信息已经存储到并查集中了,直接返回即可
236+ // 寻找u的根
237+ int uRoot = find(u);
238+ // 寻找v的根
239+ int vRoot = find(v);
240+ if (uRoot == vRoot) {
241+ // --if-- 如果u,v的根相同,说明两者已经连接了,直接输出
242+ System.out.println(u + " " + v);
243+ return;
244+ }
245+ // --if-- 将信息添加到并查集
246+ father[vRoot] = uRoot;
247+ }
248+
249+ }
250+ ```
251+
252+
253+
179254### Python
180255
181256``` python
You can’t perform that action at this time.
0 commit comments