并查集操作
来源:互联网 发布:谁在星密码开淘宝店铺 编辑:程序博客网 时间:2024/05/23 22:19
把常用的并查集写下来备用:
注:第一个并查集操作转自他人博客.
1:
typedef struct _node{_node* parent;int rank;}node;node *s[5000];void makeSet(int x){s[x]=new node;s[x]->rank=0;s[x]->parent=s[x];}node* findSet(node* s){if(s!=s->parent){s->parent=findSet(s->parent);}return s->parent;}void link(node *s1, node *s2){if(s1==s2)return;if(s1->rank > s2->rank)s2->parent=s1;else{s1->parent=s2;if(s1->rank==s2->rank)s2->rank++;}}void _union(node *s1, node *s2){link(findSet(s1),findSet(s2));}
2:
//并查集操作//n 代表数据规模//p[] 存放的是每一个数据的父节点make_set(int x){int i;for(i=0;i<n;i++){p[i]=i;rank[i]=0;}}link(int x,int y){if(rank[x] > rank[y])p[y]=x;elsep[x]=y;if(rank[x]==rank[y])rank[y]++;}findset(int x){if(x!=p[x])p[x]=findset(p[x]);return p[x];}union(int x,int y){link(findset(x),findset(y));}
3:
#define number 20int find(int array[],int x){while(array[x]>0)x=array[x];return x;}void operate(){int i,h,k;int m,n;int num[number];for(i=0;i<number;i++)num[i]=0;n = find(num,h);m = find(num,k);if(m!=n){num[n] = m;//..oprate here..}}
- 并查集操作
- 并查集操作
- 并查集基本操作
- 并查集的基本操作
- hdu 2473 (并查集 删除操作)
- 并查集的基本操作
- zoj 3789 并查集 删除操作
- 不同类型元素的并查集操作
- 关押罪犯---并查集操作
- 并查集的基本操作模版
- 普通并查集基本操作
- hdu 2473(并查集+删除操作)
- aoj2170(并查集操作更改)
- UVa 10158 并查集+位操作
- 不带权并查集的操作
- 亲戚【并查集】(内附并查集基本操作)
- 并查集之找假爹(并查集删除操作)-NYOJ-合纵连横
- 【NYOJ 1022】合纵连横 【并查集的 并查删操作】
- 容器适配器
- 本机ubuntu 32bit 编译linux kernel成功
- linux进程/内存管理的数据结构之u区
- linux常用指令
- 使用p6spy打印hibernate或者PreparedStatement的带参数值的sql语句
- 并查集操作
- Ubuntu本地源制作与本地源的维护
- 如何阻止DBA看到你的数据?
- 正则表达式学习(五)匹配一组字符
- 新的第一篇
- TMaskEdit控件的用法
- Linux如何退出VI编辑器
- Linux 环境进程间通信(0) 序:深刻理解Linux进程间通信(IPC)
- iphone4 的使用技巧(经典呀)