并查集基础+优化(下标从0开始)
- IT业界
- 2025-09-04 15:57:01

#include<iostream> #include<algorithm> #include<vector> using namespace std; const int N = 1e5+10; int n,m; int fa[N]; void set(int u,int v) { fa[v] = u; } int find(int arr[],int i) { while(arr[i] != -1) { i = arr[i]; } return i;//返回的是这个节点所在的树的根节点的下标 } int main(void) { cin >> n >> m; for(int i = 0 ; i < n ; i++)//以0为序号 fa[i] = -1; for(int i = 1 ; i <= m ; i++) { int u,v; cin >> u >> v; set(u,v); } for(int i = 0 ; i < n ; i++) cout << fa[i] << " "; int pos1,pos2;//输入像查询节点是否在同一个集合 cin >> pos1 >> pos2; if(find(fa,pos1) == find(fa,pos2)) { cout << "Yes" << endl; } else { cout << "No" << endl; } return 0; } /* 8 6 0 1 0 2 2 3 2 4 5 6 6 7 */
路径优化
#include<iostream> #include<algorithm> #include<vector> using namespace std; const int N = 1e5+10; int n,m; int fa[N]; void set(int u,int v) { fa[v] = u; } int find(int fa[],int i) { int t = i; while(fa[t] != -1) { t = fa[t]; } while(i != fa[i]) { int a = i; i = fa[i]; fa[a] = t; } return t;//返回的是这个节点所在的树的根节点的下标 } int main(void) { cin >> n >> m; for(int i = 0 ; i < n ; i++)//以0为序号 fa[i] = -1; for(int i = 1 ; i <= m ; i++) { int u,v; cin >> u >> v; set(u,v); } for(int i = 0 ; i < n ; i++) cout << fa[i] << " "; int pos1,pos2;//输入像查询节点是否在同一个集合 cin >> pos1 >> pos2; if(find(fa,pos1) == find(fa,pos2)) { cout << "Yes" << endl; } else { cout << "No" << endl; } return 0; } /* 8 6 0 1 0 2 2 3 2 4 5 6 6 7 */并查集基础+优化(下标从0开始)由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“并查集基础+优化(下标从0开始)”
上一篇
Pikachu靶场-SSRF漏洞
下一篇
神经网络新手入门(1)目录