1 条题解
-
0
思路
在线M合并与Q人数查询,重复/自合并不增加大小,N10万/M20万;区别静态两点关系查询。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; vector<int>p,sz;int f(int x){return p[x]==x?x:p[x]=f(p[x]);}int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int n,m;cin>>n>>m;p.resize(n+1);iota(p.begin(),p.end(),0);sz.assign(n+1,1);while(m--){char op;int a,b;cin>>op>>a;if(op=='Q')cout<<sz[f(a)]<<'\n';else{cin>>b;a=f(a);b=f(b);if(a!=b){if(sz[a]<sz[b])swap(a,b);p[b]=a;sz[a]+=sz[b];}}}}
- 1