初始化的并查集与不初始化的有什么区别??
  • 板块P1661 扩散
  • 楼主jubingkun
  • 当前回复11
  • 已保存回复11
  • 发布时间2023/6/26 18:42
  • 上次更新2023/11/3 12:22:51
查看原帖
初始化的并查集与不初始化的有什么区别??
945545
jubingkun楼主2023/6/26 18:42

我刚做这道题时没有初始化:

#include<iostream>
#include<cstdio>
#include<queue>
#include<cmath>
#define pritnf printf
using namespace std;
const int N = 1005;
int n;
int x[N], y[N];
int f[N];
int cnt = 1;
int ans;
int findf(int k) {
	return f[k] == 0 ? k : f[k] = findf(f[k]);
}
int dis(int x1, int y1, int x2, int y2) {
	return (abs(x1 - x2) + abs(y1 - y2) + 1) / 2;
}
int dis2(int i1, int j1, int i2, int j2) {
	return (abs(x[i1] - x[i2]) + abs(y[j1] - y[j2]) + 1) / 2;
}
priority_queue<pair<int, pair<int, int> > > q;
int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		scanf("%d%d", &x[i], &y[i]);
	}
	for (int i = 1; i <= n; i++)
		for (int j = 1; j < i; j++)
			q.push(make_pair(-dis(x[i], y[i], x[j], y[j]), make_pair(i, j)));
	while (cnt < n ) {
		ans = q.top().first;

		int tx = q.top().second.first;
		int ty = q.top().second.second;
		int xx = findf(tx);
		int yy = findf(ty);
		if (xx != yy)	f[xx] = yy, cnt++;
		q.pop();
	}
	pritnf("%d", ans);
	return 0;
}

0分 但我把并查集初始化后

#include<iostream>
#include<cstdio>
#include<queue>
#include<cmath>
#define pritnf printf
using namespace std;
const int N = 1005;
int n;
int x[N], y[N];
int f[N];
int cnt = 1;
int ans;
int findf(int k) {
	return f[k] == k ? k : f[k] = findf(f[k]);
}
int dis(int x1, int y1, int x2, int y2) {
	return (abs(x1 - x2) + abs(y1 - y2) + 1) / 2;
}
priority_queue<pair<int, pair<int, int> > > q;
int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		scanf("%d%d", &x[i], &y[i]);
		f[i] = i;//把并查集初始化为i
	}
	for (int i = 1; i <= n; i++)
		for (int j = 1; j < i; j++)
			q.push(make_pair(-dis(x[i], y[i], x[j], y[j]), make_pair(i, j)));
	while (cnt < n ) {
		ans = q.top().first;
		int xx = findf(q.top().second.second);
		int yy = findf(q.top().second.first);
		if (xx != yy)	f[xx] = yy, cnt++;
		q.pop();
	}
	pritnf("%d", -ans);
	return 0;
}

怎么就A了呢? 求大佬解答!!

2023/6/26 18:42
加载中...