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

并查集基础+优化(下标从0开始)

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N = 1e5+10;
int n,m;
int fa[N];
void set(int u,int v)
{
	fa[v] = u;
}
int find(int arr[],int i)
{
	while(arr[i] != -1)
	{
		i = arr[i];	
	}	
	return i;//返回的是这个节点所在的树的根节点的下标 
} 
int main(void)
{
	cin >> n >> m;
	for(int i = 0 ; i < n ; i++)//以0为序号 
	fa[i] = -1;
	for(int i = 1 ; i <= m ; i++)
	{
		int u,v;
		cin >> u >> v;
		set(u,v);
	}
	for(int i = 0 ; i < n ; i++)
	cout << fa[i] << " ";
	int pos1,pos2;//输入像查询节点是否在同一个集合
	cin >> pos1 >> pos2; 
	if(find(fa,pos1) == find(fa,pos2)) 
	{
		cout << "Yes" << endl;
	}
	else
	{
		cout << "No" << endl;
	}
	return 0;
} 
/*
8 6
0 1
0 2
2 3
2 4
5 6
6 7
*/

路径优化

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N = 1e5+10;
int n,m;
int fa[N];
void set(int u,int v)
{
	fa[v] = u;
}
int find(int fa[],int i)
{
	int t = i;
	while(fa[t] != -1)
	{
		t = fa[t];	
	}	
	while(i != fa[i])
	{
		int a = i;
		i = fa[i];
		fa[a] = t;
	}
	return t;//返回的是这个节点所在的树的根节点的下标 
} 
int main(void)
{
	cin >> n >> m;
	for(int i = 0 ; i < n ; i++)//以0为序号 
	fa[i] = -1;
	for(int i = 1 ; i <= m ; i++)
	{
		int u,v;
		cin >> u >> v;
		set(u,v);
	}
	for(int i = 0 ; i < n ; i++)
	cout << fa[i] << " ";
	int pos1,pos2;//输入像查询节点是否在同一个集合
	cin >> pos1 >> pos2; 
	if(find(fa,pos1) == find(fa,pos2)) 
	{
		cout << "Yes" << endl;
	}
	else
	{
		cout << "No" << endl;
	}
	return 0;
} 
/*
8 6
0 1
0 2
2 3
2 4
5 6
6 7
*/

http://www.dtcms.com/a/23016.html

相关文章:

  • win32汇编环境,对话框中使用月历控件示例二
  • 第二章:逻辑代数与逻辑门电路——数字世界的“语言”与“积木”
  • 【机器学习】深入浅出KNN算法:原理解析与实践案例分享
  • Dav_笔记14:优化程序提示 HINTs -4
  • 自动驾驶---基于深度学习模型的轨迹预测
  • TS语言自定义脚手架
  • 神经网络新手入门(1)目录
  • 责任链模式解析FilterChain
  • 2000-2020年年汇率平均价数据
  • Ubuntu 22.04.5 LTS 安装企业微信,(2025-02-17安装可行)
  • 二十多年前的苹果电源Power Mac G4 Mdd 电源接口
  • 宝塔docker 安装oracle11G
  • 【097】基于51单片机排队叫号系统【Keil程序+报告+原理图】
  • 4.【线性代数】——矩阵的LU分解
  • STC 51单片机63——关于STC8H的ADC通道切换问题
  • 软硬链接?
  • 附录2:组维接口信息大全
  • 过于依赖chatgpt编程会有哪些弊端?
  • IOT-CVE-2018-17066(D-Link命令注入漏洞)
  • ubuntu22.04安装kvm、virt-manage并配置SR-IOV操作
  • Spring Boot 启动优化✨
  • TCP协议(Transmission Control Protocol)
  • Kubernetes控制平面组件:Kubernetes如何使用etcd
  • Python基础--计算机基础
  • 用于可靠工业通信的5G-TSN集成原型:基于帧复制与消除可靠性的研究
  • Pytorch使用手册-使用 PyTorch 和 TIAToolbox 进行全视野切片图像分类(专题十七)
  • 机器学习_18 K均值聚类知识点总结
  • el-tree选中数据重组成树
  • s1K 数据集:是一个用于提升语言模型推理能力的高质量数据集。包含 1,000 个问题,每个问题都配有详细的 推理路径 和 答案。
  • 共同性思考:数据标注研究与数据标注工作者 工作范式思考