额,20分求助
  • 板块P2078 朋友
  • 楼主mot1ve
  • 当前回复1
  • 已保存回复1
  • 发布时间2020/11/27 08:38
  • 上次更新2023/11/5 07:16:14
查看原帖
额,20分求助
250699
mot1ve楼主2020/11/27 08:38

一开始建图dfs切掉的,后来看到有并查集做法,试了一下并查集,然而只有20分,不过好像没看出来有什么问题。

#include<bits/stdc++.h>
using namespace std;
int n,m,p,q;
const int N=100010;
int fa1[N],fa2[N],size1[N],size2[N]; 
int find1(int x)
{
	if(x==fa1[x]) return x;
	return fa1[x]=find1(fa1[x]);
}
int find2(int x)
{
	if(x==fa2[x]) return x;
	return fa2[x]=find2(fa2[x]);
}
int main()
{
	//freopen("P2078_2.in","r",stdin);
	//freopen("wngdh.out","w",stdout); 
	cin>>n>>m>>p>>q;
	for(int i=1;i<=n;i++)
	{
		fa1[i]=i;
		size1[i]=1;
	}
	for(int i=1;i<=m;i++)
	{
		fa2[i]=i;
		size2[i]=1;
	}
	for(int i=1;i<=p;i++)
	{
		int x,y;
		cin>>x>>y;
		int f1=find1(x),f2=find1(y);
		fa1[f2]=f1;
		size1[f1]+=size1[f2];
	}
	for(int i=1;i<=q;i++)
	{
		int x,y;
		cin>>x>>y;
		x=abs(x),y=abs(y);
		int f1=find2(x),f2=find2(y);
		fa2[f2]=f1;
		size2[f1]+=size2[f2];
	}
	int rt1=find1(1);
	int rt2=find2(1);
	cout<<min(size1[rt1],size2[rt2]);
	return 0;
}
2020/11/27 08:38
加载中...