欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

并查集:合并区间、询问两个数是否在同一个集合中

时间:2023-06-05

 

合并:

 

路径压缩:

#includeusing namespace std;const int N=100010;int n,m;int p[N];//返回x的祖宗节点+路径压缩//路径压缩:把每个节点都指向它的祖宗节点 int find(int x){if(p[x]!=x)p[x]=find(p[x]);return p[x];}int main(){scanf("%d%d",&n,&m);//初始化:把每个节点的祖宗节点都指向自己 for(int i=1;i<=n;i++)p[i]=i;while(m--){char op[2];int a,b;scanf("%s%d%d",op,&a,&b);if(op[0]=='M')//合并节点 p[find(a)]=find(b);else{if(find(a)==find(b))puts("Yes");elseputs("No");}}return 0;}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。