只过了三个测试点
  • 板块P1551 亲戚
  • 楼主sin30
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/1/25 21:52
  • 上次更新2023/10/28 10:56:56
查看原帖
只过了三个测试点
261357
sin30楼主2022/1/25 21:52

只过了三个测试点,实在找不出什么问题了,有比较空闲的大佬给看看吗?qwq

#include <iostream>

#define MAXN 1000001

int n, m, p;
int set[MAXN] = { 0 };
int number_set = 0;
int t1, t2;
int tn1, tn2;

int Find(int tt)
{
	return set[tt];
}

void Union(int sn1, int sn2)
{
	for (int i = 0; i < n; i++)
	{
		if (set[i] == sn2)
		{
			set[i] = sn1;
		}
	}
}

void solve(void)
{
	std::cin >> n >> m >> p;
	for (int i = 0; i < m; i++)
	{
		std::cin >> t1 >> t2;
		tn1 = Find(t1);
		if (tn1 == 0)
		{
			number_set++;
			set[t1] = number_set;
			tn1 = number_set;
		}
		tn2 = Find(t2);
		if (tn2 == 0)
		{
			number_set++;
			set[t2] = number_set;
			tn2 = number_set;
		}
		if (tn1 != tn2)
		{
			Union((tn1 < tn2) ? tn1 : tn2, (tn1 < tn2) ? tn2 : tn1);
			number_set--;
		}
	}
	for (int i = 0; i < p; i++)
	{
		std::cin >> t1 >> t2;
		if (set[t1] == set[t2] && set[t1] != 0)
		{
			std::cout << "Yes" << std::endl;
		}
		else
		{
			std::cout << "No" << std::endl;
		}
	}
}

int main(void) {
  solve();
  return 0;
}
2022/1/25 21:52
加载中...