解题报告-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;
}


阅文集团大数据面试题及参考答案 在 Flink 中,watermark 是一种用于处理乱序事件时间的机制。实现接口:通常需要实现 AssignerWithPeriodicWatermarks 或 AssignerWithPunctuatedWatermarks 接口。前者会周期性地生成 watermark,后者则是基于某些特定事件来生成 watermark ,比如接收到某个特定值的消息时。定义位置:可以在数据源处或者在流处理的中间操作中定义 watermark。在数据源定义时,能更精准地根据数据的产生特性设置 watermark; 阅读详情

相关推荐

手把手教你编写PCIe设备驱动:基于Linux内核的实战教程

本文详细介绍了基于Linux内核的PCIe设备驱动开发全流程,包括环境准备、设备探测、中断处理、DMA配置等核心内容。通过实战代码示例和Makefile编写指南,帮助开发者快速掌握PCIe驱动开发技术,实现高性能设备驱动开发与优化。

weixin_30687051的博客 193

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

Marin说PCB之LPDDR5的布线注意事项--01

以上就是本期所有内容了,有些是通用的LPDDR5的设计准则,有的是针对单板的设计规则,严格意义说是没有哪一种规则是完全适用的LPDDR5的 通用规则的,不同的单板可能板厚,板材,层数,SOC以及DDR的型号都是不同的,一般的做法就是严格按照SOC手册上的LPDDR5的要求加上仿真同事给的建议修改优化就好了,我们下期文章不见不散。我们知道想要做好一个LPDDR颗粒,需要考虑的是因素有很多例如,电源完整性,信号完整性,层叠的设计,布局的摆放,布线的合理规划,去耦电容的摆放等等。

weixin_45223454的博客 3162

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

Tessent实战:网表扫描链插入全流程解析

本文详细解析了使用Tessent工具为网表插入扫描链(Scan Chain)的全流程。从前期环境配置、网表检查,到扫描链数量、时钟域等核心配置,再到执行扫描单元替换与连接,最后进行结果验证与文件输出。文章提供了关键命令与实用技巧,帮助工程师高效完成DFT设计,确保芯片可测试性。

hhh00的博客 746

【训练】Qwen2.5VL 多机多卡 Grounding Box定位

之前的相关文章:【深度学习】LLaMA-Factory微调sft Qwen2-VL进行印章识别使用LLaMA-Factory微调sft Qwen2-VL-7B-Instruct构建最新的LLaMA-Factory镜像。

q742971636的博客 2583

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

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

你的代码 受命于你 632

Multisim14使用教程详尽版--(2025最新版)

摘要:本文详细介绍了Multisim14电路仿真软件的功能和使用方法。主要内容包括:1)主流电路仿真软件比较,突出Multisim在教学、竞赛设计中的优势;2)软件界面说明,涵盖菜单栏、工具栏、元器件库和仪器仪表;3)18类元器件分类详解及其使用操作;4)15种仪器仪表的原理和应用场景;5)电路原理图设计与仿真流程;6)基本电路分析方法(直流静态工作点分析、交流分析等)。文章还提供了硬件工程师笔试面试相关资源链接,涵盖电阻、电容、三极管等器件知识及AD软件操作指南。通过系统讲解,帮助用户掌握Multisim

XU157303764的博客 2万+

HDOJ-1232 畅通工程

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

傲娇的晓明 427

用 SQL Trace 透视 SAP HANA 执行链路:从会话层到内部语句,一次把性能问题抓个现行

摘要:SAP HANA 的 SQL Trace 是性能分析和故障定位的关键工具,它记录会话层所有执行的 SQL 语句。文章解释了 SQL Trace 的工作原理、使用场景和配置方法,包括图形界面和 SQL 命令两种启用方式。重点讨论了存储过程内部语句的捕获问题,指出需要通过设置 internal 参数才能获取过程体中的详细 SQL 语句。文章还提供了实用的排查建议,强调要精准控制 Trace 范围,避免生成过大文件。最后通过真实案例展示了如何利用 SQL Trace 快速定位性能问题。(149字)

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

全网最详细的UAVCAN/DroneCAN链路开发(官方DroneCAN消息+自定义DroneCAN消息)附DroneCAN项目源码

全网最详细的UAVCAN/DroneCAN链路移植开发(官方DroneCAN消息+自定义DroneCAN消息)附工程移植源码

Bit_Dong的博客 3235

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

工业质检终极方案:C#上位机融合 YOLO+Blob分析(一站式尺寸测量+缺陷检测)

本次上位机界面严格遵循工业现场操作规范简洁、直观、按钮大、文字清晰、参数可视化调节,操作人员为车间工人/质检员,无需复杂操作,所有功能一目了然。所有控件均为WinForms原生控件,拖拽即可完成布局,无任何自定义控件,开发效率拉满,核心布局永久复用本次实战完成的C#上位机+YOLO+Blob融合质检方案,是工业规则零件全尺寸质检的终极落地方案,完美解决了单一检测方案的所有短板,具备以下不可替代的工业价值。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1343

HDOJ 1232 畅通工程

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

aileen02190的博客 181

Devexpress16.2.6破解工具

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

HDOJ1232 并查集

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

weixin_30496751的博客 112

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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、付费专栏及课程。

余额充值