求助
  • 板块P2078 朋友
  • 楼主syr1125
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/12/21 11:19
  • 上次更新2023/10/24 07:03:38
查看原帖
求助
561949
syr1125楼主2022/12/21 11:19
#include <bits/stdc++.h>
using namespace std;

int n, m, p, q;
int f1[10005], f2[10005];

void init()
{
	for (int i = 1; i <= n; i ++)
	{
		f1[i] = i;
	}
	for (int i = 1; i <= m; i ++)
	{
		f2[i] = i;
	} 
} 

int find(int x)
{
	return f1[x] == x ? x : f1[x] = find(f1[x]);
}

int find2(int x)
{
	return f2[x] == x ? x : f2[x] = find(f2[x]);
}

int main()
{
	scanf("%d%d%d%d", &n, &m, &p, &q);
	init();
	for (int i = 1; i <= p; i ++)
	{
		int x, y;
		scanf("%d%d", &x, &y);
		if (find(x) != find(y))
		{
			f1[find(x)] = find(y);
		}
	}
	for (int i = 1; i <= q; i ++)
	{
		int x, y;
		scanf("%d%d", &x, &y);
		x = abs(x), y = abs(y);
		if (find2(x) != find2(y))
		{
			f2[find2(x)] = find2(y);
		}
	}
	
	int ans1 = 1;
	for (int i = 2; i <= n; i ++)
	{
		if (find(1) == find(i))
		{
			ans1 ++;
			//cout << i << endl;
		}
	}
	int ans2 = 1;
	for (int i = 2; i <= m; i ++)
	{
		if (find2(1) == find2(i))
		{
			ans2 ++;
		}
	}
	
	printf("%d", min(ans1, ans2));
	return 0;
}

20pts , find2函数出了问题 , 帮蒟蒻看看呗

2022/12/21 11:19
加载中...