过样例wa所有点求调
  • 板块P2078 朋友
  • 楼主xf20280111
  • 当前回复1
  • 已保存回复2
  • 发布时间2025/1/28 22:16
  • 上次更新2025/1/29 08:28:50
查看原帖
过样例wa所有点求调
1411354
xf20280111楼主2025/1/28 22:16
#include<bits/stdc++.h>
using namespace std;
const int N = 100000 + 10;
int fa[N],fa1[N];
int find(int x)
{
	if (fa[x]!=x) return fa[x]=find(fa[x]);
	return x;
}
int find1(int x)
{
	if (fa1[x]!=x) return fa1[x]=find(fa1[x]);
	return x;
}
void hb(int x,int y)
{
	int xx=find(x),yy=find(y);
	if (xx!=yy)
	{
		fa[xx]=yy;
	} 
}
void hb1(int x,int y)
{
	int xx=find1(x),yy=find1(y);
	if (xx!=yy)
	{
		fa1[xx]=yy;
	} 
}
int main()
{
	int n,m,x,y;
	cin >> n >> m >> x >> y;
	for (int i = 1;i <= n;i++ )fa[i] = i;
	for (int i = 1;i <= m;i++) fa1[i] = i;
	for (int i = 1;i <= x;i++){
		int a,b;
		cin >> a >> b;
		hb(a,b);
	}
	int sum = n,sum1 = m;
	for (int i = 1;i <= n;i++){
		if (find(i) != find(1)) {
			sum--;
		}
	}
	for (int i = 1;i <= y;i++){
		int a,b;
		cin >> a >> b;
		hb1(abs(a),abs(b));
}
	for (int i = 1;i <= m;i++){
		if (find1(i) != find1(1)) sum1 --;
	}
	for (int i = 1;i <= n;i++)cout << i << " " << fa[i] << "\n";
	for (int i = 1;i <= m;i++)cout << i << " " << fa1[i] << "\n";
	cout << min(sum,sum1);
	return 0;
}
2025/1/28 22:16
加载中...