合并集合
-
核心思想:并查集:
- 1.将两个集合合并
- 2.询问两个元素是否在一个集合当中
-
基本原理:每个集合用一棵树表示 树根的编号就是整个集合的编号
每个节点存储其父节点,p[x]表示x的父节点-
#include<iostream> using namespace std; const int N=100010; int p[N]; //路径压缩优化后 int find(int x){ if(p[x]!=x) p[x] = find(p[x]); return p[x]; } int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++) p[i] = i; while(m--){ string op; int a,b; cin>>op>>a>>b; if(op=="M") p[find(a)] = find(b); //合并操作 将a的父节点改为b else{ if(find(a) == find(b)) cout<<"Yes"<<endl; else cout<<"No"<<endl; } } }