30pts求调
  • 板块P2078 朋友
  • 楼主LucAlva
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/28 20:28
  • 上次更新2024/12/28 23:43:27
查看原帖
30pts求调
1044970
LucAlva楼主2024/12/28 20:28

RT

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int b[N+10]{},g[N+10]{};
int aaa(int x){
    if(b[x]==x){
        return x;
    }
    return b[x]=aaa(b[x]);
}
int bbb(int x){
    if(g[x]==x){
        return x;
    }
    return g[x]=bbb(g[x]);
}
int main(){
    int n,m,p,q;
    scanf("%d%d%d%d",&n,&m,&p,&q);
    for(int i=1;i<=n;i++){
        b[i]=i;
    }
    for(int i=1;i<=m;i++){
        g[i]=i;
    }
    int bx[p+10],by[p+10]{},gx[p+10]{},gy[p+10]{};
    for(int i=1;i<=p;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		bx[i]=x;
		by[i]=y;
	}
    for(int i=1;i<=q;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		gx[i]=x;
		gy[i]=y;
	}
    for(int i=1;i<=p;i++){
    	b[bx[i]]=aaa(bx[i]),b[by[i]]=aaa(by[i]);
        if(b[bx[i]]>b[by[i]]){
            swap(b[bx[i]],b[by[i]]);
        }
        b[by[i]]=b[bx[i]];
    }
    for(int i=1;i<=q;i++){
    	g[abs(gx[i])]=bbb(abs(gx[i])),g[abs(gy[i])]=bbb(abs(gy[i]));
        if(g[abs(gx[i])]>g[abs(gy[i])]){
            swap(g[abs(gx[i])],g[abs(gy[i])]);
        }
        g[abs(gy[i])]=g[abs(gx[i])];
    }
    int s1=0,s2=0;
    for(int i=1;i<=n;i++){
        if(aaa(i)==aaa(1)){
            s1++;
        }
    }
    for(int i=1;i<=m;i++){
        if(bbb(i)==bbb(1)){
            s2++;
        }
    }
    printf("%d",min(s1,s2));
    return 0;
}
2024/12/28 20:28
加载中...