社区讨论

20pts求助

P2078朋友参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhk76i3o
此快照首次捕获于
2025/11/04 14:38
4 个月前
此快照最后确认于
2025/11/04 14:38
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN=1e8;
ll n,m,p,q;
ll x,y;
ll maxn1[MAXN],maxn2[MAXN];
ll find1(ll o)
{
	if(o==maxn1[o]) return maxn1[o];
	else return maxn1[o]=find1(maxn1[o]);
}
void join1(ll a,ll b)
{
	ll f1=find1(a),f2=find1(b);
	if(f1!=f2) maxn1[f2]=f1;
}
ll find2(ll o)
{
	if(o==maxn2[o]) return maxn2[o];
	else return maxn2[o]=find2(maxn2[o]);
}
void join2(ll a,ll b)
{
	ll f1=find2(a),f2=find2(b);
	if(f1!=f2) maxn2[f2]=f1;
}
ll len1,len2;
int main()
{
	cin>>n>>m>>p>>q;
	for(ll i=1;i<=n;i++) maxn1[i]=i;
	for(ll i=1;i<=m;i++) maxn2[i]=i;
	for(ll i=1;i<=p;i++)
	{
		cin>>x>>y;
		join1(x,y);
	}
	for(ll i=1;i<=q;i++)
	{
		cin>>x>>y;
		join2(abs(x),abs(y));
	}
	for(ll i=1;i<=n;i++)
	{
		if(maxn1[i]==1) len1++;
	}
	for(ll i=1;i<=m;i++)
	{
		if(maxn2[i]==1) len2++;
	}
	cout<<min(len1,len2);
	return 0;
}	

回复

2 条回复,欢迎继续交流。

正在加载回复...