博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并查集学习
阅读量:5062 次
发布时间:2019-06-12

本文共 1118 字,大约阅读时间需要 3 分钟。

转载请注明来源:https://www.cnblogs.com/TheSilverMoon/p/9309481.html

并查集简单点说就是判断图的两个点是否连通,但是一个个查找很麻烦,怎么办呢?那就让他们的老大直辖所有的小弟,所以我们每次查询只要看他们俩的老大是不是一样的就可以了。

下面是我的并查集代码

同时推荐一个大佬的解释,很有意思https://blog.csdn.net/u013546077/article/details/64509038

#include 
#define fi first#define se second#define pb push_back#define fio ios::sync_with_stdio(false);cin.tie(0);#define pii pair
#define vi vector
#define vc vector
#define pi 3.1415926const int INF=0x3f3f3f3f;const int N=1e5+5;typedef long long ll;typedef double db;typedef unsigned long long ull;using namespace std;int pre[N];//记录各个点的上一个节点,如果自己是老大就等于自己int findRoot(int n)//查找根节点{ int r=n; while(pre[r]!=r)//查找这个点的根节点 { r=pre[r]; } //r现在是根节点 int i=n,j; while(i!=r)//路径压缩,让小弟直接归老大直辖 { j=pre[i]; pre[i]=r; i=j; } return r;}void join(int x,int y)//把各个连同分支连起来{ int r1=findRoot(x); int r2=findRoot(y); if(r1!=r2)//如果已经连通不用管 { pre[r1]=r2;//不连通的时候随便指定一个是另一个的老大 }}int main(){}

转载于:https://www.cnblogs.com/TheSilverMoon/p/9309481.html

你可能感兴趣的文章
无法向会话状态服务器发出会话状态请求
查看>>
数据中心虚拟化技术
查看>>
01入门
查看>>
复习文件操作
查看>>
C#Hashtable与Dictionary性能
查看>>
10个让你忘记 Flash 的 HTML5 应用演示
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
Primary definition
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
发送请求时params和data的区别
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
一步步学习微软InfoPath2010和SP2010--第七章节--从SP列表和业务数据连接接收数据(4)--外部项目选取器和业务数据连接...
查看>>
如何增强你的SharePoint 团队网站首页
查看>>
FZU 1914 Funny Positive Sequence(线性算法)
查看>>
oracle 报错ORA-12514: TNS:listener does not currently know of service requested in connec
查看>>
基于grunt构建的前端集成开发环境
查看>>
MySQL服务读取参数文件my.cnf的规律研究探索
查看>>
java string(转)
查看>>