40分求dalao指点

P2078 朋友

```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


|