关注
mywgo
并查集的板子
#include<iostream>
(30316)#include<vector>
#include<map>
(30192)#include<algorithm>
using namespace std;
map<int,int> father; //通过散列表map实现的father数组
map<int,int> height; //记录每个节点的高度
int find(int x){
if(father.find(x)!=father.end()){
if(father[x]!=x)
father[x]=find(father[x]); //路径压缩(最后自己通过例子模拟下过程)
}
else{//如果还没有出现的新节点。把father设成他自己(表示根节点),height设成0
father[x]=x;
height[x]=0;
}
return father[x];
}
void Union(int a,int b){//合并函数
a=find(a);
b=find(b);
if(a!=b){
if(height[a]>height[b])
father[b]=a;
else if(height[b]>height[a])
father[a]=b;
else{
father[a]=b;
height[a]++;
}
}
}
int main()
{
int i,j;
while(cin>>i>>j){
Union(i,j);
}
int sum=0;
for(auto it=father.begin();it!=father.end();it++){
if(it->first==it->second)sum++; //只要有一个父亲是本身的就说明是根节点
}
cout<<sum<<endl;
return 0;
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
2025-11-15 08:21
江西理工大学 数据分析师 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 哪些公司在招寒假实习? #
12313次浏览 155人参与
# 卷__卷不过你们,只能卷__了 #
10256次浏览 226人参与
# MiniMax求职进展汇总 #
627次浏览 23人参与
# 26年哪些行业会变好/更差 #
17039次浏览 226人参与
# 写论文的崩溃时刻 #
5355次浏览 128人参与
# 去年的flag与今年的小目标 #
8561次浏览 178人参与
# 有深度的简历长什么样? #
15294次浏览 318人参与
# 你不能接受的企业文化有哪些 #
10462次浏览 154人参与
# 入职第一天 #
9282次浏览 196人参与
# 你都用AI做什么 #
6145次浏览 144人参与
# 国企vs私企,你更想去? #
305211次浏览 2485人参与
# 一人分享一道面试手撕题 #
20482次浏览 741人参与
# 你在职场上见过哪些“水货”同事 #
29053次浏览 162人参与
# 机械人还在等华为开奖吗? #
304790次浏览 1553人参与
# 关于春招你都做了哪些准备? #
122078次浏览 704人参与
# 机械人的秋招小目标 #
26032次浏览 229人参与
# 你怎么看待AI面试 #
133201次浏览 742人参与
# 现在前端的就业环境真的很差吗 #
492043次浏览 5963人参与
# 晒一晒你收到的礼盒 #
95137次浏览 462人参与
# 找工作时的取与舍 #
115032次浏览 848人参与
# 实习,不懂就问 #
149681次浏览 1340人参与
查看1道真题和解析