thesuspects.java

来自「PKU中一些数据结构基本算法题的java实现」· Java 代码 · 共 83 行

JAVA
83
字号
package PKU.Unionfindsets;
import java.util.Scanner;


/**
 * ID:1611
 * 并查集算法
 * @author yhm
 *
 */
public class TheSuspects {

	
	static int[] num ,father;
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		while(cin.hasNext()){
			int n = cin.nextInt();
			int m = cin.nextInt();
			if(n==0 && m==0){
				break;
			}
			makeset(n);
			for(int i=0;i<m;i++){
				int k = cin.nextInt();
				int mem1 = cin.nextInt();
				for(int j=1;j<k;j++){
					int mem = cin.nextInt();
					unionset(mem1,mem);
				}
			}
			
			System.out.println(num[find(0)]);
			
			
		}

	}
	
	static void makeset(int n)
	{
		num = new int[n];
		father = new int[n];
	    for(int i=0;i<n;i++)
	    {
	        father[i]=-1;
	        num[i]=1;
	    }
	}

	static int find(int a)
	{
	    while(father[a]!=-1)
	        a=father[a];
	    return a;
	}

	static void unionset(int a,int b)
	{
		a = find(a);
		b = find(b);
	    if(a==b)
	        return;
	    if(num[a]<=num[b])
	    {
	        father[a]=b;
	        num[b]+=num[a];
	    }
	    else
	    {
	        father[b]=a;
	        num[a]+=num[b];
	    }
	}
	

}

⌨️ 快捷键说明

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