zoukankan
html css js c++ java
并查集
/* UnionFindSet.h 并查集,非递归方法,含路径压缩,数组从0开始 合并时,前者合并入后者,不区分大小 */ #include <iostream> using namespace std; #define MAXN 30005 class UFS { public: int n; int father[MAXN+1];//集合根结点 int rank[MAXN+1]; //集合中点的个数 int depth[MAXN+1]; //每个结点改变一次所属的集合,增加一些值 public: UFS(int size = MAXN); void clear(); int Find(int x); //a并入b中,不区分大小 //value表示:如果a并入b中,a中r所有元素能获得的值 void Union(int a, int b, int value = 0); }; UFS::UFS(int size):n(size) { //必须从0开始 for(int i = 0; i <= n; i++) { father[i] = i; rank[i] = 1; depth[i] = 0; } } void UFS::clear() { for(int i = 0; i <= n; i++) { father[i] = i; rank[i] = 1; depth[i] = 0; } } int UFS::Find(int x) { int temp = x,sum = 0,ans; while(temp != father[temp]) { sum = sum + depth[temp]; temp = father[temp]; } ans = temp; while(x != ans) { sum -= depth[x]; depth[x] += sum; temp = father[x]; father[x] = ans; x = temp; } return ans; } void UFS::Union(int a, int b,int value) { int x = Find(a); int y = Find(b); if(x == y) return ; if(value >= 0) depth[x] = value; else depth[x] = rank[y]; rank[y] += rank[x]; father[x] = y; }
查看全文
相关阅读:
委托(delegate)的三种调用方式:同步调用,异步调用,异步回调(转载)
C#异步:实现一个最简单的异步
关于Thread.IsBackground属性的理解(转载)
C# 中的多线程(转载)
个人对AutoResetEvent和ManualResetEvent的理解(转载)
C#线程系列讲座(4):同步与死锁
Nginx location 配置踩坑过程分享
微信扫码登录网页实现原理
负载均衡SLB
Tomcat学习
原文地址:https://www.cnblogs.com/windmissing/p/2559888.html
最新文章
数据
算法
数据结构
关于户口
讲座总结
大唐电信科技产业集团兴唐通信科技有限公司补充招聘
数据
【校招/社招】三星通信研究院招聘专利工程师
2015.4.22
面试
热门文章
【机器学习实战】第4章 朴素贝叶斯(Naive Bayes)
【机器学习实战】第7章 集成方法(随机森林和 AdaBoost)
【机器学习实战】第3章 决策树(Decision Tree)
【机器学习实战】第2章 k-近邻算法(kNN)
【机器学习实战】第1章 机器学习基础
Apache Storm 1.1.0 中文文档 | ApacheCN
精英的思维模式
不要让自己的脑袋成为别人思想的跑马场
《稀缺》读后感
《精进:如何成为一个很厉害的人》读书笔记(转载)
Copyright © 2011-2022 走看看