P1551 亲戚 样例过 0分求调
  • 板块学术版
  • 楼主封禁用户
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/12/8 12:05
  • 上次更新2024/12/8 15:19:01
查看原帖
P1551 亲戚 样例过 0分求调
1153760
封禁用户楼主2024/12/8 12:05

https://www.luogu.com.cn/problem/P1551 代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n, ans;
ll bin[50005], c[50005];
int zx(int x) {
	int z;
	if (bin[x] == x) {
	//	cout << "fanhui" << x << "\n";
		return x;
	} else {
	//	cout << "digui\n";
		z = zx(bin[x]);
//		bin[x] = z;  //路径压缩
	}
	//cout << "fanhui" << z << "\n";
	return z;
}
int main() {
	int n, m, p;
	cin >> n >> m >> p;
	for (int i = 1; i <= n; i++) {
		bin[i] = i;
	}
	int a, b;
	while (m--) {
		cin >> a >> b;
		bin[b] = a;
	}
	for (int i = 1; i <= p; i++) {
		cin >> a >> b;
		if (zx(a) == zx(b)) {
			c[i] = 1;
		}
	}
	for (int i = 1; i <= p; i++) {
		if (c[i] == 1) {
			cout << "\nYes";
		} else {
			cout << "\nNo";
		}
	}
	return 0;
}
//	ios::sync_with_stdio(false);

思路:先把每个人(bin)的祖先设为自己,然后把两个人的祖先进行比较,如果一样,就是亲戚,c数组是暂时存储是不是亲戚的,祖先zx函数是查找祖先的

2024/12/8 12:05
加载中...