欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

并查集模板(Java版)

程序员文章站 2022-03-24 17:28:26
...
import java.util.Scanner;

public class Main{
    static final int N=1050;
    static int n,m,u,v;
    static int[] p=new int[N];
    static void init(){
        for(int i=1;i<=n;i++){
            p[i]=i;
        }
    }
    static int find(int x){
        return p[x]==x?x:(p[x]=find(p[x]));
    }
    static void unit(int a,int b){
        p[find(a)]=find(b);
    }
    static boolean isUnit(int a,int b){
        return find(a)==find(b);
    }
    public static void main(String[] args) {
        Scanner cin=new Scanner(System.in);
        while(cin.hasNext()){
            n=cin.nextInt();
            if(n==0){
                break;
            }
            m=cin.nextInt();
            init();
            int res=n-1;
            while(m-->0){
                u=cin.nextInt();
                v=cin.nextInt();
                if(!isUnit(u,v)){
                    res--;
                    unit(u,v);
                }
            }
            System.out.println(res);
        }
    }
}
相关标签: 并查集