一开始建图dfs切掉的,后来看到有并查集做法,试了一下并查集,然而只有20分,不过好像没看出来有什么问题。
#include<bits/stdc++.h>
using namespace std;
int n,m,p,q;
const int N=100010;
int fa1[N],fa2[N],size1[N],size2[N];
int find1(int x)
{
if(x==fa1[x]) return x;
return fa1[x]=find1(fa1[x]);
}
int find2(int x)
{
if(x==fa2[x]) return x;
return fa2[x]=find2(fa2[x]);
}
int main()
{
//freopen("P2078_2.in","r",stdin);
//freopen("wngdh.out","w",stdout);
cin>>n>>m>>p>>q;
for(int i=1;i<=n;i++)
{
fa1[i]=i;
size1[i]=1;
}
for(int i=1;i<=m;i++)
{
fa2[i]=i;
size2[i]=1;
}
for(int i=1;i<=p;i++)
{
int x,y;
cin>>x>>y;
int f1=find1(x),f2=find1(y);
fa1[f2]=f1;
size1[f1]+=size1[f2];
}
for(int i=1;i<=q;i++)
{
int x,y;
cin>>x>>y;
x=abs(x),y=abs(y);
int f1=find2(x),f2=find2(y);
fa2[f2]=f1;
size2[f1]+=size2[f2];
}
int rt1=find1(1);
int rt2=find2(1);
cout<<min(size1[rt1],size2[rt2]);
return 0;
}