栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

并查集的经典例题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

并查集的经典例题

题目
题解

定义: 
并查集,我们通常是在开始时让每个元素构成一个单元素的集合,
然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。
若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;
即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行时间(1~3秒)
内计算出试题需要的结果,只能用并查集来描述。 

#include
using namespace std;
int n,m,z,x,y,f[10005];
int find(int k){             //函数find,用来路径压缩 
    if(f[k]==k)  return k;
    return f[k]=find(f[k]);
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    f[i]=i;                //初始化i的老大为自己
    for(int i=1;i<=m;i++){
        cin>>z>>x>>y;
        if(z==1)
            f[find(x)]=find(y);   //将 X与 Y 所在的集合合并
            else if(find(x)==find(y))   //判断 X与 Y是否在同一集合内
                cout<<"Y"<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1013151.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号