```cpp
#include<iostream>
#include<cmath>
#define MAX 100100
using namespace std;
int n,m,q,p;
int f1[MAX],f2[MAX],ans[2];
void mem() //初始化
{
for(int i=1;i<=n;i++) f1[i]=i;
for(int i=1;i<=m;i++) f2[i]=i;
}
int find(int x,int y[])
{
int zu;
if(y[x]!=x) zu=find(y[x],y);
else zu=x;
y[x]=zu;
return zu;
}
int main()
{
cin>>n>>m>>p>>q;
mem();
for(int i=1,a,b,fa,fb;i<=p;i++)
{
cin>>a>>b;
fa=find(a,f1),fb=find(b,f1);
if(fa!=fb)
{
if(fa==1) f1[fb]=fa;
else f1[fa]=fb;
}
}
for(int i=1,a,b,fa,fb;i<=q;i++)
{
cin>>a>>b;
a=abs(a),b=abs(b);
fa=find(a,f2),fb=find(b,f2);
if(fa!=fb)
{
if(fa==1) f2[fb]=fa;
else f2[fa]=fb;
}
}
for(int i=1;i<=n;i++) if(f1[i]==1) ans[0]++;
for(int i=1;i<=m;i++) if(f2[i]==1) ans[1]++;
cout<<min(ans[0],ans[1]);
return 0;
}
```
by a_shishen @ 2018-12-23 21:30:48