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

连通图(并查集)

#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.dtcms.com/a/84743.html

相关文章:

  • DFS刷题
  • 人工智能 - DeepSeek 和 Manus 的区别和应用场景
  • 数据结构之链表(双链表)
  • C语言入门教程100讲(5)基本数据类型
  • QEMU 模拟GL.iNET 路由器设备
  • C++面试准备一(常考)
  • python每日十题(6)
  • Redis学习记录
  • AF3 rot_matmul 和 rot_vec_mul函数解读
  • 【算法学习之路】13.BFS
  • 大语言模型进化论:从文本理解到多模态认知的革命之路
  • 高斯数据库-WDR Snapshot生成性能报告
  • 【商城实战(56)】商城数据生命线:恢复流程与演练全解析
  • datawhale组队学习--大语言模型—task4:Transformer架构及详细配置
  • 7. 二叉树****
  • Proteus 使用入门指南
  • Powershell WSL .wslconfig 实现与宿主机的网络互通
  • 0322-数据库、前后端
  • SSE详解面试常考问题详解
  • 基于 Vue 3 的PDF和Excel导出
  • Ubuntu22.04通过DKMS包安装Intel WiFi系列适配器(网卡驱动)
  • JavaScript 中 “new Map()”的使用
  • AI语音聊天机器人APP(使用webrtc、语音识别、TTL、langchain、大语语模型、uniapp)
  • 用坦克比喻理解类的封装性
  • 二叉树的层序遍历||(107)
  • 用 pytorch 从零开始创建大语言模型(六):对分类进行微调
  • C++中,构造函数和析构函数
  • 初识HTTP
  • 一维前缀和与二维前缀和的详细用法和介绍
  • 局域网设备访问虚拟机 挂载NFS