数据来自最小生成树(二)kruskal算法及存储结构_哔哩哔哩_bilibili
#include <iostream>
#include <queue>
#include <string>
#include <stack>
#include <vector>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;
#define ll unsigned long long
#define INF 0x7fffffff
typedef pair<int, int> PII;
struct Node {
int s, e, w; //起点, 终点, 边权
};
Node edge[10];
int fa[6];
int wsum = 0;
int findfa(int x) {
if (fa[x] == x) return x;
return fa[x] = findfa(fa[x]);
}
void kruskal() {
for (int i = 0; i < 6; i++) fa[i] = i;
sort(edge, edge + 10, [&](Node a, Node b) -> bool{
return a.w < b.w;
});
for (int i = 0; i < 10; i++) {
int a = findfa(edge[i].s);
int b = findfa(edge[i].e);
if (a != b) {
fa[a] = b;
sum += edge[i].w;
}
}
return;
}
int main() {
edge[0].s = 0, edge[0].e = 1, edge[0].w = 6;
edge[1].s = 0, edge[1].e = 2, edge[1].w = 1;
edge[2].s = 0, edge[2].e = 3, edge[2].w = 5;
edge[3].s = 1, edge[3].e = 2, edge[3].w = 5;
edge[4].s = 1, edge[4].e = 4, edge[4].w = 3;
edge[5].s = 2, edge[5].e = 3, edge[5].w = 5;
edge[6].s = 2, edge[6].e = 4, edge[6].w = 6;
edge[7].s = 2, edge[7].e = 5, edge[7].w = 4;
edge[8].s = 3, edge[8].e = 5, edge[8].w = 2;
edge[9].s = 4, edge[9].e = 5, edge[9].w = 6;
kruskal();
cout << wsum;
return 0;
}