自己的 并查集 模板
刚刚学习完并查集的基础知识.. 自己写了3个模板类 . 发上和大家分享下:
#include <iostream>
using namespace std;
typedef class arrUFS{
public:
arrUFS(int n = 0):N(n){ set = new int[n]; for ( int i = 0; i != N; ++ i) set[i] = i; };
~arrUFS(){ delete [] set; };
int find ( int x ){ return set[x]; }
void Merge1( int a,int b){ int i = min(set[a],set[b]);
int j = max(set[a],set[b]);
for ( int k=1; k<=N; k++) {
if (set[k] == j)
set[k] = i;
}
}
private:
int *set;
int N;
}arrUFS; // 数组形式
//树形并查集, 路径压缩
typedef struct {
int parent;
int cnt;
}Tset;
typedef class treeUFS{
public:
treeUFS(int n = 0):N(n+2) { set = new Tset[N];
for ( int i = 0; i != N; ++ i)
set[i].parent = i,set[i].cnt = 1;
}
~treeUFS(){ delete [] set; };
int find ( int x ){ int r = x; while ( set[r].parent != r ) //循环结束,则找到根节点
r = set[r],parent;
int i = x;
while ( i != r) //本循环修改查找路径中所有节点
{
int j = set[i].parent;
set[i].parent = r;
i = j;
}
return r;
}
void Merge1( int x,int y ){ x = find ( x ); y = find ( y );
if ( x == y ) return;
if ( set[x].cnt > set[y].cnt ){
set[y].parent = x;
set[x].cnt += set[y].cnt;
}
else{
set[x].parent = y;
set[y].cnt += set[x].cnt;
}
}
private:
int *set;
int N;
}treeUFS; // 树形式 路径压缩
//属性并查集, 带树深
typedef struct {
int parent;
int height;
}Tset;
typedef class treeUFS{
public:
treeUFS(int n = 0):N(n+2) { set = new Tset[N];
visited = new bool[N];
for ( int i = 0; i != N; ++ i)
set[i].parent = i,set[i].height = 1,visited[i] = false;
}
~treeUFS(){ delete [] set; };
int find ( int x ){ int r = x; while ( r != set[r].parent ) r = ser[r].parent;
return r;
}
void Merge1( int x,int y ){ x = find ( x ); y = find ( y );
if ( x == y ) return;
if ( set[x].height == set[y].height ){
set[y].parent = x;
set[x].height ++;
}
else if ( set[x].height < set[y].height ) {
set[x].parent = y;
}
else{
set[y].parent = x;
}
}
private:
int *set;
bool *visited;
int N;
}treeUFS; // 树形式 带树深
int main ()
{
return 0;
}
转载于:https://www.cnblogs.com/MiYu/archive/2010/08/18/1802543.html
自己的 并查集 模板相关推荐
- HDU 1213 How Many Tables(并查集模板)
http://acm.hdu.edu.cn/showproblem.php?pid=1213 题意: 这个问题的一个重要规则是,如果我告诉你A知道B,B知道C,这意味着A,B,C知道对方,所以他们可以 ...
- 【CCCC】L3-003 社交集群 (30分),并查集模板,map排序
problem L3-003 社交集群 (30分) 当你在社交网络平台注册时,一般总是被要求填写你的个人兴趣爱好,以便找到具有相同兴趣爱好的潜在的朋友.一个"社交集群"是指部分兴趣 ...
- 【SCAU 新生赛】18247 aler的旅游计划 并查集模板题
18247 aler的旅游计划 该题有题解 时间限制:1000MS 代码长度限制:10KB 提交次数:15 通过次数:0 收入:10 题型: 编程题 语言: 不限定 Description aler想 ...
- 强盗团伙(啊哈-并查集[模板])
题目 快过年了,犯罪分子们也开始为年终奖"奋斗"了,小哼的家乡出现了多次抢劫事件.由于强盗人数过于庞大,作案频繁,警方想查清楚到底有几个犯罪团伙实在是太不容易了,不过警察叔叔还是搜 ...
- 战争来临(并查集模板题)
战争来临(并查集模板题) 描述 那一个骑单车卖报纸的少年 恐慌的眼泪慢慢布满了侧脸----<战争世界> B国对A国发动了侵略战争,A国不得不全力抵御.A国幅员辽阔,后方群众的支援补 ...
- 并查集模板题(stl 中map的运用)
DongDong认亲戚 DongDong每年过春节都要回到老家探亲,然而DongDong记性并不好,没法想起谁是谁的亲戚(定义:若A和B是亲戚,B和C是亲戚,那么A和C也是亲戚),她只好求助于会编程的 ...
- 并查集模板——并查集(洛谷 P3367)
题目选自洛谷P3367 是并查集的最入门的题目,也是并查集的模板题~~ 如果你还不知道并查集是什么? 请看我的这篇文章 点击链接 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作. 输入格式 ...
- 【畅通工程 HDU - 1232 】【并查集模板题】
并查集讲解和模板 有一个博文对此分析的很透彻,附链接 为避免原链接失效,现摘录如下: 为了解释并查集的原理,我将举一个更有爱的例子. 话说江湖上散落着各式各样的大侠,有上千个之多.他们没有什么正当职业 ...
- (并查集模板)AcWing 模板+例题240.食物链
并查集最简单的模板 #include <bits/stdc++.h>using namespace std; int p[100010]; int n,m; int Find(int x) ...
- SDUTOJ [2801] 并查集模板
英语四六级系列(一) Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 众所周知,英语四六级考试有几套不同的试卷,而且,为了防 ...
最新文章
- js new Date()不带时分秒时,时间变了 问题解决
- python多进程打印输出_python 多进程日志 logging
- boost::hana::not_equal用法的测试程序
- 【SDL】SDL简介
- 在OpenShift上托管的WildFly实例上进行Arquillian测试
- 1646. 获取生成数组中的最大值
- 清空StringBuilder的三种方法及效率
- newifi3高恪魔改最新_12.08达达最新球球id账号呆瓜表
- 移动互联网“去哪儿”?
- easyui中idField的作用
- linux蓝牙安装程序,Linux 端蓝牙调试工具
- r语言 与python r中python环境的创建
- 关于如何查找NXP S32K1xx系列单片机的封装信息和引脚定义
- 动态RAM(64K*1)INTEL2164简介(抄自原理图)
- 手机微信打不开连接到服务器错误代码,微信打不开文件是怎么回事(微信文件错误代码90018)...
- 千道Java面试真题整理系列:MySQL灵魂五十问,在遇面试也不怕.
- 优化算法系列-模拟退火算法(1)——基本原理枯燥版本
- mybatic动态SQL及结果处理
- 模仿的豌豆荚滑动Menu 的 实现
- 如何使用adb工具进行查看Android中创建的数据库文件
热门文章
- 手把手教你强化学习(十) 基于Stochastic Policy的深度强化学习方法
- ubuntu16.04创建自己的桌面图标
- 国内外优秀的源码网站
- MY_0001:添加命令到自定义工具栏
- python学习day35 并发编程 操作系统 进程概念
- post提交参数有Date类型,总是返回400格式错误
- 几个例子弄懂JS 的setInterval的运行方式
- 【转】容器 C++ set和map
- BZOJ1934: [Shoi2007]Vote 善意的投票
- RandomCodeUtil随机数工具类,随机生成数字、字母、数字字母组合、中文姓名