hdu 1232通畅工程

与hdu1213一样简单并查集。
定义:
并查集是一种树型的数据结构,用于处理一些不相交集(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的元素所在的集合合并。。在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这样的问题看起来似乎很简单,每次直接暴力查找即可,但是我们需要注意的问题是,在数据量非常大的情况下,那么时间复杂度将达到O(N*n)(n为查询次数),那么这类问题在实际应用中,如果采取上述方法去做的话,耗费的时间将是巨大的。而如果用常规的数据结构去解决该类问题的话(顺序结构,普通树结构等),那么计算机在空间上也无法承受。所以,并查集这种数据结构便应运而生了。
描述:
话说江湖上散落着各式各样的大侠,有上千个之多。整天背着剑在外面走来走去,碰到不是一路人的,就要打一架。但大侠们有一个优点就是讲义气,绝对不打自己的朋友。而且他们信奉“朋友的朋友就是我的朋友”,只要是能通过朋友关系串联起来的,都认为是自己人。这样,江湖上就形成了一个个群落,通过两两之间的朋友关系串联起来。而不在同一个群落的人,无法通过朋友关系起来,于是就可以放心往死了打。但是两个原本互不相识的人,如何判断是否属于一个朋友圈呢?我们可以在每个朋友圈内推举出一个有名望的人,作为该圈子的代表人物,这样,每个圈子就可以这样命名“齐达内朋友之队”……两人只要互相对一下自己的队长是不是同一个人,就可以确定敌友关系了。
但是还有问题啊,大侠们只知道自己直接的朋友是谁,很多人压根就不认识队长,要判断自己的队长是谁,只能漫无目的的通过朋友的朋友关系问下去:“你是不是队长?你是不是队长?”这样一来,队长面子上挂不住了,而且效率太低,还有可陷入无限循环中。于是队长下令,重新组队。队内所有人实行分等级制度,形成树状结构,我队长就是根节点,下面分别是二级队员、三级队员。每个人只要记住自己的上级是谁就行了。遇到判断敌友的时候,只要一层层向上问,直到最高层,就可以在短时间内确定队长是谁了。由于我们关心的只是两个人之间是否连通,至于他们是如何连通的,以及每个圈子内部的结构是怎样的,甚至队长是谁,并不重要。所以我们可以放任队长随意重新组队,只要不搞错敌友关系就好了。于是,门派产生了。

参考链接:https://blog.csdn.net/gao506440410/article/details/81700887

点击查看代码
import java.util.Scanner;

public class hdu1232 {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			int n = sc.nextInt();
			if (n==0) {
				break;
			}
			int m = sc.nextInt();
			int[] lda = new int[n];
			for (int i = 0; i < lda.length; i++) {
				lda[i] = i;				
			}
			for (int i = 0; i < m; i++) {
				int a = sc.nextInt()-1;
				int b = sc.nextInt()-1;
				merge(a, b, lda);
			}
			int res = 0;
			for (int i = 0; i < lda.length; i++) {
				if (i==lda[i]) {
					res++;
				}
			}
			System.out.println(res-1);	
		}
		sc.close();
	}
	public static int find(int a,int[] lda) {
		int index = a;
		while (lda[index]!=index) {
			index = lda[index];			
		}
		return index;
	}
	public static int[] merge(int a,int b,int[] lda) {
		int x = find(a, lda);
		int y = find(b, lda);
		if (x!=y) {
			lda[x] = y;
		}
		return lda;
	}
}
posted @ 2024-05-06 13:12  XiaohuangTX  阅读(1)  评论(0编辑  收藏  举报