当前位置: 首页 > article >正文

连通图(并查集)

#include<iostream>
#include<vector>
using namespace std;
int parent[100005];//记录每个点的根 
int rank_[100005];//记录集合的高度
//并查集初始化
void init(int n){
	for(int i=1;i<=n;i++){
		parent[i]=i;//每个点的父节点初始化为自己
		rank_[i]=1;//初始时所有树的高度为1 
	}
} 
//找到x的根,并压缩
int find(int x){
	if(parent[x]!=x)
		parent[x]=find(parent[x]);//路径压缩,使x直接指向根
	return parent[x]; 
} 
//合并x和y的集合
void union_sets(int x,int y){
	int rootx=find(x);
	int rooty=find(y);
	if(rootx!=rooty){
		if(rank_[rootx]>rank_[rooty])
			parent[rooty] = rootx;
		else if(rank_[rootx] < rank_[rooty])
			parent[rootx] = rooty;
		else{
			parent[rooty] = rootx;
			rank_[rootx]++;
		}
	}
} 

int main(){
	int n,m;
	while((scanf("%d %d",&n,&m))!=EOF){
		init(n);
		for(int i=0;i<m;i++){
			int x,y;
			cin >> x >> y;
			union_sets(x,y);
		}
		int root=find(1);
		bool connected = true;
		for(int i=2;i<=n;i++){
			if(find(i)!=root){
				connected=false;
				break;
			}
				
		}
		cout << (connected?"YES":"NO") << endl;
	}
	return 0;
}


http://www.kler.cn/a/596777.html

相关文章:

  • C# WebForm显示bootstrap模态对话框
  • 中颖SH366000介绍和使用全解
  • [01-04-02].第20节:PyQt5库初识及实现简易计算器
  • 数智读书笔记系列022《算力网络-云网融合2.0时代的网络架构与关键技术》读书笔记
  • css基础-浮动
  • 【工具变量】全国地级市克鲁格曼专业化指数数据集(2006-2023年)
  • 基于蒙特卡洛方法的网格世界求解
  • 使用netDxf扩充LaserGRBL使它支持Dxf文件格式
  • 在刀刃上发力:如何精准把握计划关键节点
  • uniapp 微信小程序 手机号快速验证组件 解密 encryptedData 获取手机号
  • docker速通
  • OAuth 2.0认证
  • doris:负载均衡
  • 【数据预测】基于遗传算法GA的LSTM光伏功率预测 GA-LSTM光伏功率预测【Matlab代码#91】
  • OpenHarmony 开源硬件学习全指南:从入门到实战
  • JAVA - OJ沙箱(JAVA默认模板沙箱,JAVA操作dokcer沙箱)
  • MacOS安装 nextcloud 的 Virtual File System
  • LangChain组件Tools/Toolkits详解(6)——特殊类型注解Annotations
  • llama源码学习·model.py[4]Attention注意力(2)源码分析
  • 洛谷 [语言月赛 202503] 题解(C++)