Kruskal 运行错误求助
  • 板块灌水区
  • 楼主somek_
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/1/1 19:21
  • 上次更新2024/1/1 21:45:29
查看原帖
Kruskal 运行错误求助
1037054
somek_楼主2024/1/1 19:21
#include <bits/stdc++.h>
using namespace std;

struct node {
	int x, y, z, opt;
} edge[10020];
int n, m, cnt;
int fa[320];
long long sum;

bool cmp(node a, node b) {
	return a.z < b.z;
}

int find(int x) {
	if (x == fa[x]) return x;
   return fa[x] = find(fa[x]);
}

int main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
		fa[i] = i;
	for (int i = 1; i <= m; i++) {
		cin >> edge[i].opt >> edge[i].x >> edge[i].y >> edge[i].z;
		if (edge[i].opt == 1)
			fa[edge[i].y] = edge[i].x, sum += edge[i].z;
	}
	sort(edge + 1, edge + m + 1, cmp);
	for (int i = 1; i <= m; i++) {
		if (edge[i].opt == 2) {
			int x = find(edge[i].x), y = find(edge[i].y);
			if (x == y)
				continue;
			cnt++;
			fa[y] = x;
			sum += edge[i].z;
		}
	}
	cout << sum;
}

好像是find函数的问题

2024/1/1 19:21
加载中...