@[beautiful_chicken233](/user/814343)
AC代码:
```cpp
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e4+10;
int fa[N],n,m,p,q,ans=1e6,cnt;
// 初始化并查集
void init(int n) {
for (int i = 1; i <= n; i++) fa[i] = i;
}
// 查找x所在的集合 + 路径压缩
int find_Set(int x) {
if (fa[x] != x) fa[x]=find_Set(fa[x]);
return fa[x];
}
// 合并x和y所在的集合,并且把他们的父节点赋值为小的那个
void merge(int x, int y){
int fx = find_Set(x);
int fy = find_Set(y);
if (fx < fy) fa[fy] = fx;
else fa[fx] = fy;
}
int main(){
scanf("%d%d%d%d",&n,&m,&p,&q);
int a,b;
init(n);
while(p--) scanf("%d%d",&a,&b),merge(a,b);
for(int i=1;i<=n;i++) if(find_Set(i)==1) cnt++;
ans=min(ans,cnt);
cnt=0;
init(m);
while(q--) scanf("%d%d",&a,&b),merge(-a,-b);
for(int i=1;i<=m;i++) if(find_Set(i)==1) cnt++;
ans=min(ans,cnt);
printf("%d\n",ans);
return 0;
}
```
by uberking @ 2023-04-23 16:42:16