并查集的Java实现

Java实现并查集,合并时采用路径压缩算法。

如果合并时使用循环修改的方法,一次合并的时间复杂度就为N,无法接受

public class Union {

    public int[] id;//对应索引所在的集
    public int[] sz;//所在集的size,合并时小集合大集
    public int count;
    public Union(int N){
        id = new int[N];
        for(int i=0;i<id.length;i++){
            id[i] = i;
        }
    }//初始化,每个节点的集都对应自己
    public boolean connected(int p,int q){
        return id[p] == id[q];
    }
    public int root(int i){
        //找到节点所在的集
        while(i!=id[i]){
            id[i] = id[id[i]];
            i = id[i];
        }
        return id[i];
        /*
        递归的路径压缩算法
        if(i!=id[i]){
            id[i] = root(id[i]);
         }
         return id[i];
         */
    }
    public void union(int p,int q){
        int i = root(p);
        int j = root(q);
        //root使每个值都找到自己的集合
        if(i==j){
            return ;
        }
        if(sz[i]<sz[j]){
            id[i] = j;
            sz[j] += sz[i];
        }else{
            id[j] = i;
            sz[i] += sz[j];
        }
        count-- ;
    }

}

原文地址:https://www.cnblogs.com/sh1296/p/10326246.html

时间: 2024-10-12 04:15:46

并查集的Java实现的相关文章

并查集数据结构java源码

在网上看到一个题目: 给定一个字符串的集合,格式如:.要求将其中交集不为空的集合合并,要求合并完成的集合之间无交集,例如上例应输出. (1) 请描述你解决这个问题的思路: (2) 给出主要的处理流程,算法,以及算法的复杂度: (3) 请描述可能的改进. 其中一个解决方案是使用并查集,(数据结构中有,但已经忘了囧) 所以,百度了一下,主要参考了一个博主的 文章http://blog.csdn.net/dm_vincent/article/details/7655764  ,思路讲得很清楚,但是在代

并查集---java模板

并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中.这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受:即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行时间(1-3秒)内计算出试题需要的结果,只能用并查集来描述. 基础的:hdu1232 参考博客ht

并查集(Java实现)

并查集:用数组实现 思路 数组里存的数字代表所属的集合.比如arr[4]==1;代表4是第一组.如果arr[7]==1,代表7也是第一组.既然 arr[4] == arr[7] == 1 ,那么说明4 和 7同属于一个集合, 代码 /** * 数组实现并查集,元素内数字代表集合号 */ public class UnionFind { /** * 数组,表示并查集所有元素 */ private int[] id; /** * 并查集的元素个数 */ private int size; /** *

HDU3081Marriage Match II(二分答案+并查集+最大流SAP)经典

Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2507    Accepted Submission(s): 856 Problem Description Presumably, you all have known the question of stable marriage match. A

并查集+贪心 HDU4424

先对边进行从大到小的排序 并查集保存节点数和长度 Conquer a New Region Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1289    Accepted Submission(s): 429 Problem Description The wheel of the history rolling forward, o

HDU 3407.Zjnu Stadium 加权并查集

Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3726    Accepted Submission(s): 1415 Problem Description In 12th Zhejiang College Students Games 2007, there was a new stadium built

HDU 1811 Rank of Tetris(并查集按秩合并+拓扑排序)

Rank of Tetris Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9267    Accepted Submission(s): 2668 Problem Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想

Zjnu Stadium(加权并查集)

Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3186    Accepted Submission(s): 1226 Problem Description In 12th Zhejiang College Students Games 2007, there was a new stadium built

*HDU1829 并查集

A Bug's Life Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 14121    Accepted Submission(s): 4603 Problem Description Background Professor Hopper is researching the sexual behavior of a rare s