并查集模板!

 1 #include <iostream>
 2 #include <cstdlib>
 3 #include <cstdio>
 4 #include <cstring>
 5 #define N 30
 6 using namespace std;
 7
 8 int ufs[N];
 9
10 int Find(int x)
11 {
12     if(x==ufs[x]) return x;
13     ufs[x]=Find(ufs[x]);
14     return ufs[x];
15 }
16
17 void Merge(int x,int y)
18 {
19    ufs[Find(x)]=Find(y);
20 }
21
22 int main()
23 {
24     for(int i=0;i<N;i++) ufs[i]=i;
25 }

时间: 2024-11-06 20:20:58

并查集模板!的相关文章

并查集模板

//普通并查集模板 #include<iostream> using namespace std; const int MAX=10004; int fat[MAX];//存放每个节点的根节点 //找x的根节点并且把路径上的每个节点的父节点改成根节点 int find(int x) //while找根节点 { int rt=x; while(fat[rt]!=rt) rt=fat[rt]; int i=x,j; while(i!=rt){ j=fat[i]; fat[i]=rt; i=j; }

并查集 模板

const int MAX=1010;  //元素个数的最大值,根据题目修改int p[MAX];void init(int n) //n为实有元素个数{    for (int i=1; i<=n; i++)  p[i]=i;  }int find(int x) //查找{   if (x==p[x]) return x;    else  return  p[x]=find(p[x]);} void merge(int x,int y) //合并{   int px,py;    px=fi

【并查集模板】并查集模板 luogu-3367

题目描述 简单的并查集模板 输入描述 第一行包含两个整数N.M,表示共有N个元素和M个操作. 接下来M行,每行包含三个整数Zi.Xi.Yi 当Zi=1时,将Xi与Yi所在的集合合并 当Zi=2时,输出Xi与Yi是否在同一集合内,是的话输出Y:否则话输出N. 分析 简单的模板,解释留到算法微解读 AC代码 #include <bits/stdc++.h> using namespace std; int n,m; int fa[10000+5]; inline int read(){ int X

洛谷p3367 并查集模板

并查集是一种树型的数据结构,主要用来处理一些不相交集合的合并和更改问题. 比如找4的祖先,原来是 4->2->1,通过并查集路径压缩后,变为 4->1.也就变成了下图. 并查集的模板题: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m; int dad[2000001]; int find(int x)//很简单的find函数,网上还

并查集模板、

并查集是一种用来管理元素分组情况的数据结构. 并查集的复杂度:并查集加入两个优化(路径压缩和高度的合并)以后效率很高,对n个元素的并查集进行一次操作的复杂度是O(a(n)).在这里,a(n)是阿克曼(Ackermann)函数的反函数,这比O(log(n))还快,不过这是“均摊复杂度”,也就是说不是每一次操作都满足这个复杂度,而是多次操作以后平均每一次的操作的复杂度是O(a(n)) 1 int par[MAX_N]; //父亲 2 int rank[MAX_N]; //树的高度 3 4 //初始化

【总结】并查集模板

并查集是解决集合之间关系的一种很好理解的数据结构 就相当于将一个个集合合并成一棵树 然后将每个节点都只想根节点 主要两个操作是join(a,b);将两个节点合并在一起 find(x);查找x的根节点 时间复杂度为树的高度O(h) 如果数据特别没节操就会卡成一条链 就成O(n)的时间复杂度了 优化有两种方法 其中路径压缩是最常见的 因为树的形态完全不重要 所以将树的节点都连在同一层上 时间复杂度就成O(1)了; 给一个介绍很形象生动的博客http://blog.csdn.net/ljfbest/a

PAT甲题题解-1114. Family Property (25)-(并查集模板题)

题意:给出每个人的家庭成员信息和自己的房产个数与房产总面积,让你统计出每个家庭的人口数.人均房产个数和人均房产面积.第一行输出家庭个数,随后每行输出家庭成员的最小编号.家庭人口数.人均房产个数.人均房产面积. 并查集,合并的时候编号小的作为父亲节点,最后父亲节点一样的即属于一个家庭,其它都是细节处理没啥好说了. #include <iostream> #include <cstdio> #include <algorithm> #include <string.h

普通并查集模板

朴素的并查集: int set[10005]; int findSet(int x) { if (set[x] == x) return x; return set[x] = findSet(set[x]); } void unionSet(int x, int y) { int fx = findSet(x); int fy = findSet(y); if(fx!=fy) set[fx] = fy; } 别忘了赋初值: for(int i=1; i<=n; i++) set[i] =i; 原

PAT-1107 Social Clusters (30 分) 并查集模板

1107 Social Clusters (30 分) When register on a social network, you are always asked to specify your hobbies in order to find some potential friends with the same hobbies. A social cluster is a set of people who have some of their hobbies in common. Y

并查集模板hdu-1213

目录 例题:hdu 1213 1.合并的优化 2.查询的优化--路径的压缩 3.优化完成的代码 例题:hdu 1213 //#include <bits/stdc++.h> #include <iostream> #include <stack> #include <string> #include <queue> #include <stack> #include <set> #include <list>