#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false);cin.tie(0);
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int MAXN = 1006;
const int MAXM = 1006;
int f[MAXN];
int n, m;
struct Edge {
int u, v, c;
}edge[MAXM];
//查+路径压缩
int find(int x) {
return f[x] == -1 ? x : f[x] = find(f[x]);
}
bool cmp(Edge a, Edge b) {
return a.c < b.c;
}
int krustral() {
//ans记录权值,cnt记录加入的边数
int ans = 0,cnt=0;
memset(f, -1, sizeof(f));
sort(edge, edge + m, cmp);
for (int i = 0; i < m; i++) {
int u = edge[i].u, v = edge[i].v, c = edge[i].c;
int fx = find(u), fy = find(v);
if (fx != fy) {
ans += c;
f[fx] = fy;
cnt++;
}
if (cnt == n - 1)
break;
}
if (cnt < n - 1)
return - 1;
return ans;
}
kruskal
最新推荐文章于 2023-02-07 09:31:37 发布