小学生,20分(TAT),有注释
查看原帖
小学生,20分(TAT),有注释
1068448
guang_zi_guei_ji楼主2024/6/13 05:31
#include<iostream>
using namespace std;
int a[10040],b[10040];
int f(int x){//男生集合 
	if(a[x]==x){
		return x;
	}
	else{
		return a[x]=f(a[x]);//优化 
	}
}
int f1(int x){//女生集合 
	if(b[x]==x){
		return x;
	}
	else{
		return b[x]=f(b[x]);//优化 
	}
}
int main(){
	int n,m,p,q,x=0,y=0;//x,y在*以前为输入作用    在*以后为计数作用 
	cin>>n>>m>>p>>q;
	for(int i=1;i<=n;i++){
		a[i]=i;
	}
	for(int i=1;i<=m;i++){
		b[i]=i;
	}
	for(int i=1;i<=p;i++){//输入男生 
		cin>>x>>y;
		a[f(x)]=a[f(y)];
	}
	for(int i=1;i<=q;i++){//输入女生 
		cin>>x>>y;
		x=-x;//转换成正数 
		y=-y;//转换成正数 
		b[f1(x)]=b[f1(y)];
	}
	//********************************
	x=0;//赋值以便扫描 (累加小明认识的男朋友) 
	y=0;//赋值以便扫描 (累加小红认识的女朋友)
	for(int i=1;i<=n;i++){//扫描 探测有多少总节点和小明的总节点相同的节点 (找朋友) 
		if(a[1]==a[i]){
			x++;
		}
	}
	for(int i=1;i<=m;i++){//扫描 探测有多少总节点和小红的总节点相同的节点 (找朋友) 
		if(b[1]==b[i]){
			y++;
		}
	}
	if(x<y){//比较大小并输出 
		cout<<x;
	}
	else{
		cout<<y;
	}
	return 0;
}

只AC了#1和#4

2024/6/13 05:31
加载中...