解题报告-HDOJ-1232(并查集)

HDU/HDOJ 1232 超详细题解(并查集入门教程) 城市之间由道路连接,相连的城市可以看做一个集合,如:a、b相连,c、d相连,则a和b属于集合A,c和d属于集合B。之后又有人告诉你b和e相连,那么就把e加入到集合A中,以此类推。然后不同集合若是想组成一个大的集合,即集合A和集合B若 阅读详情

并查集是一种树形数据结构,一般用来处理一些不相交集合的合并和查询。一般有如下操作:

初始化:

将集合中的所有点初始化为自身,表示该点为一个单独的集合。

void Make_Set(int x)
{//初始化
    for(int i=1;i<=x;i++)
    {
        father[i]=i;
        rank[i]=0;
    }
}

 

查找:

查找两个点是否在同一个集合中。

非递归:

int Find_Set(int x)
{//查找
    while(father[x]!=x)
    {
        x=father[x];
    }
    return x;
}

优化(压缩路径):

定义一个保存路径的save数组.

int Find_Set(int x)
{//查找
    int cnt=0;
	int save[MAXN];
    while(father[x]!=x)
    {
		save[cnt ++]=a;
        x=father[x];
    }
	for(int i=0;i<cnt;i++)
	{
		father[save[i]]=x;
	}
    return x;
}


递归写法:

int Find_Set(int x)
{//查找
    if(father[x]!=x)
	{
		father[x]=Find_set(father[x]);
	}
    return father[x];
}

合并:

将两个不相交的集合合并为一个集合。

void Union(int x,int y)
{//合并
    x=Find_Set(x);
    y=Find_Set(y);
    if(x==y) return;
        father[x]=y;
}

 

优化:

用rank数组保存树的高度,把矮树并到高的树上。

 

#include <iostream>
using namespace std;
const int MAXN=1000+50;
int father[MAXN];
int sign[MAXN];
int rank[MAXN];
int cnt[MAXN];//保存不同集合的根节点

void Make_Set(int x)
{//初始化
    for(int i=1;i<=x;i++)
    {
        father[i]=i;
        rank[i]=0;
    }
}
int Find_Set(int x)
{//查找
    int i=0;
    while(father[x]!=x)
    {
        sign[i++]=x;
        x=father[x];
    }
    for(;i>0;i--)
    {
        father[sign[i-1]]=x;
    }
    return x;
}
void Union(int x,int y)
{//合并
    x=Find_Set(x);
    y=Find_Set(y);
    if(x==y) return;
    if(rank[x]>rank[y])
    {
        father[y]=x;
    }
    else if(rank[x]==rank[y])
    {
        father[x]=y;
        rank[y]++;
    }
    else
    {
        father[x]=y;
    }
}
int Cnt_Set(int x)
{//统计不同的集合数
    int k=1;
    cnt[k++]=Find_Set(1);
    for(int i=2;i<=x;i++)
    {
        int flag=0;
        int z=Find_Set(i);
        for(int j=1;j<k;j++)
        {
            if(z==cnt[j])
            {
                flag=1;
                break;
            }
        }
        if(!flag)
        {
            cnt[k++]=z;
        }
    }
    return k-1;
}
int main()
{
    int n,m;
    while(cin>>n>>m)
    {
        if(!n)
            break;
        Make_Set(n);
        while(m--)
        {
            int x,y;
            cin>>x>>y;
            Union(x,y);
        }
        cout<<Cnt_Set(n)-1<<endl;
    }
    return 0;
}


手机拍照对焦快准狠的秘密:一文看懂PDAF、Dual Pixel和Super PD的区别 本文深入解析手机拍照中的三种主流相位检测自动对焦(PDAF)技术:Shield Pixel、Super PD和Dual Pixel。通过对比它们的原理、优缺点及实际表现,帮助读者理解不同技术的对焦速度、暗光表现和画质影响,从而做出更明智的购机选择。 阅读详情

相关推荐

大地坐标系与经纬度转换(一):大地坐标系简介

一、大地坐标系 大地坐标系是大地测量中以参考椭球面为基准面建立起来的坐标系。地面点的位置用大地经度、大地纬度和大地高度表示。 二、地心坐标系 ...

qq_42895926的博客 6万+

HDOJ-1232(并查集)

路径压缩非递归版: #include int N, M; int set[1000]; int Find(int x) { int y = x, t; while(set[y] != y) y = set[y]; while(x != y){ t = set[x]; set[x] = y; x = t;

还有多远 600

数据结构实验1.2—高精度计算PI值(西工大)

这是数据结构第二题的题目,是让我们根据用户的需求来计算派的值 这是题目的详细描述,刚看到这道题的时候,我是真的头大,完全没有思路,于是查找了一些大佬的笔记后才开始编写 这是我在写这些代码是所运用到的数学反三角函数幂次展开式的知识。 下面是正确的代码以及我的一些见解,和需要注意的一些地方。希望能对你有所帮助。如有更加精简的算法,请在评论区留下你的算法!!!谢谢!!! #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdl

abcdef0623的博客 5831

hdoj-1232 畅通工程【并查集】

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1232 #include int per[10100]; void init(int N) {     int i;     for(i=1;i<=N;++i)     {         per[i]=i;//初始化  起初每个节点都是独立的 父节点是本身     } } int

Just do it 1358

别再只放按钮了!巧用微信小程序‘长按识别’功能,打造无缝加群体验

本文深入探讨了微信小程序'长按识别'功能在社群运营中的创新应用,通过简化加群流程至一步操作,显著提升用户转化率。文章详细解析了技术实现细节、UI/UX设计策略,并对比了与企业微信API的适用场景,为开发者提供打造无缝加群体验的完整解决方案。

weixin_42627853的博客 434

fastjson1.2.83反序列化漏洞

【代码】fastjson1.2.83反序列化漏洞。

Coder的博客 1万+

并查集详解-hdoj1232-国王的烦恼

目录 1.并查集是什么? 2.并查集有什么用? 3.并查集实现思路 4.模版代码(带路径压缩) 5.例题解析 1.HDOJ 1232 并查集模版题 2.蓝桥杯 历届试题 国王的烦恼 1.并查集是什么? 首先并查集是一种特殊的数据结构,一般表现为一个数组. 2.并查集有什么用? 一般用于解决这种问题: 在一些有N个元素的集合应用问题中,我们通常是在开始时...

你的代码 受命于你 632

AIStarter避坑指南:Wan2.2 Animate整合包从下载到出片的完整流程(附常见错误修复)

本文提供了Wan2.2 Animate整合包从下载部署到生成高清视频的完整避坑指南。详细解析了通过AIStarter启动、环境配置、核心参数调优以及七大常见错误(如CUDA内存不足、节点缺失、视频模糊等)的根因与修复方案,帮助用户高效利用ComfyUI工作流,稳定生成720P高质量AI动画视频。

weixin_29052717的博客 704

HDOJ-1232 畅通工程

HDOJ-1232 畅通工程 并查集算法

傲娇的晓明 427

開機自動進入UEFI Interactive Shell無法正常開機怎麼辦?

BIOS/UEFI,啟動後進入UEFI Interactive Shell大多數人都告訴你沒有安裝系統去裝系統吧,但你明明昨天還在運行系統?今天就這樣?有沒有解決辦法?

sheaahhoi1的博客 7739

前拉后推计划逻辑适用于哪些行业和企业规模?

《前拉后推计划逻辑的行业适用性分析》摘要:前拉后推计划逻辑(需求端后推锚定交付、供应端前拉匹配资源)最适用于需求波动大且具规模效益的行业,包括家具制造(定制化需求+批量运输)、机械装备(非标设备+部件采购)、消费电子(短周期产品+核心部件备货)及汽车配套(交期绑定+批量生产)等领域。该模式要求企业具备:1)独立计划部门;2)ERP/MES等信息系统;3)资源冗余能力,故更适配中型(1-10亿营收)和大型企业(10亿+)。小型企业需简化应用,仅聚焦关键环节。不适配需求稳定(如快消品)、无规模效益或短周期生产的

追随内心 144

HDOJ 1232 查并集

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1232题意:还要修多少条路才能让n个小镇全部相连。查并集。用树来理解。在一个集合里,他们会有相同的根。有相同的根为一个集合。用数组来实现。#include<bits/stdc++.h> #define INF 1e18 #define inf 1e9 #define min(a,b) a<b?a:b #def

我不吃海鲜的博客 355

ABAP GIT 作用介绍

总结起来,ABAPGit 是一个强大的工具,它通过将 SAP ABAP 项目与 Git 版本控制系统集成,大大提高了代码管理的效率和团队协作的质量。在 ABAPGit 出现之前,ABAP 代码的版本控制和团队之间的协作主要依赖于手工操作或者是 SAP 自带的版本控制工具,这些方式效率低下,且难以实现高效的代码管理。使用 ABAPGit,SAP 项目团队不仅可以提高代码管理的效率和质量,还可以通过 Git 的强大功能实现高效的团队协作和代码审查。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 839

HDOJ 1232 畅通工程

题目传送:HDOJ 1232 畅通工程 解题思路:本题可以理解为一张无向图中给定部分连通分量,求多条连通分量间,需要至少多少条连线可以使图变为一条连通分量。对于无向图求连通分量个数问题,可以采用并查集的方法解决。 并查集:一种树形结构,常用于处理不相交集合的合并和查询问题。 相关链接:数据结构之并查集 本题代码: #include <stdio.h> in...

aileen02190的博客 181

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

HDOJ1232 并查集

所谓并查集 并:Union 查:Find 定义 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。 集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的元素所在的集合合并。 主要操作编辑 初始化 把每个点所在集合初始化为其自身。 通常来说,这个步骤在每次使用该数据结构时只需要执行一次,无...

weixin_30496751的博客 112

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

hdoj 1232+hdoj 1272 (并查集)

<br />//hdoj 1232<br />#include <iostream> using namespace std; int DisjSet[1001]; int ans; int Find(int X) { if(DisjSet[X]<0) return X; else return Find(DisjSet[X]); } void SetUnion(int Root1,int Root2) { Root1=Fin

sp_ 704

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

MST/UFS——HDOJ 1232

这道题用两种最常用的方法做,一种是用并查集,一种使用图的深度优先遍历 HDOJ 1232 畅通工程 /* HDOJ 1232 畅通工程 用并查集做 */ #include using namespace std; #define INF 999 int N,M; int p[1005]; int rank[1005]; int Find(int x) { int y,w,r

Kay's space 908

HDU 1232 畅通工程 并查集水题

题意并查集算法最后得到的集合的个数减一就是结果传送门 http://acm.hdu.edu.cn/showproblem.php?pid=1232 #include <cstdio> #include <cstring> #include <iostream>using namespace std;class UnionFind { private: int * fa; int

NM的专栏 515

HDOJ-1232(并查集)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1232 AC代码: #include int v[1002];//定义全局变量,v[i]代表城镇。 int find(int x){     int r = x;     while(r != v[r])         r = v[r];     return r;//返回x所在的集合。

时刻保持危机感&对知识的渴望 1082

HD1232并查集(disjoint)

HDOJ1232 不瞒大家,这题提交了十几遍,一道简单的并查集,硬是被我做成了一坨屎,orz,还是自己没有真正理解并查集的意思,导致自己翻车了2333 #include int city[1002]; int find(int x) { int temp=x; while(city[temp] != temp) //一定是while不能是if,是寻找根节点,不是父节点

Stay Hungry,Stay Foolish 267

并查集 HDOJ 1232 畅通工程

题目传送门 1 /* 2 并查集(Union-Find)裸题 3 并查集三个函数:初始化Init,寻找根节点Find,连通Union 4 考察:连通边数问题 5 */ 6 #include <cstdio> 7 #include <algorithm> 8 #include <cstring> ...

weixin_34179762的博客 84

【并查集】畅通工程 _HDU1232

老说这个算法懂了,那个算法理解了,什么什么的总感觉底气不足,以后一点点要把自己懂了的算法找个几题写一些,不仅是算法,代码的构造也要了解透彻才能算作会了。 今天就并查集好了,写个裸并查集,HDOJ1232 畅通工程 畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other

CD's Coding 730

并查集(模版题HDOJ1232 畅通工程)(HDOJ1198 Farm Irrigation)

一种用来表示

Invoker_94 486

HDU 1232(并査集)

简单并査集,废话不多说 题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=1232

左眼皮跳跳 723

HDOJ1232 畅通工程 【并查集】

畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 27600    Accepted Submission(s): 14496 Problem Description 某省调查城镇交通状况,得到现有城镇

长风的专栏 1160

畅通工程//HDOJ-1232//并查集

畅通工程//HDOJ-1232//并查集 题目 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? Input 测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和...

salty_fishman的博客 183
上一篇: ACM题目分类总结及pku题目分类
下一篇: 解题报告-HDOJ-1233(最小生成树——kruskal)
WellerZhao
博客等级 码龄15年 11粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值