启发式合并思想:
合并两个集合时 将小集合往大集合里面合并以此降低时间复杂度
(swap yyds!
Code:
int n, q;
cin >> n >> q;
set<int> s[n + 10];
for(int i = 1; i <= n; i++){
int x;
cin >> x;
s[i].insert(x);
}
while(q --){
int a, b;
cin >> a >> b;
if(s[a].size() > s[b].size()){
s[a].swap(s[b]);
}
for(auto x : s[a]){
s[b].insert(x);
}
s[a].clear();
cout << s[b].size() << '\n';
}