#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int M = 3000;
const int N = 1000;
int n, m;
struct Edge {
int a, b, c;
bool operator <(const Edge &t) const
{
return c < t.c;
}
}e[M];
int p[N];
int find(int u) {
if (p[u] != u)
p[u] = find(p[u]);
return p[u];
}
int main() {
scanf("%d %d", &n, &m);
for (int i = 0; i < m; i++) {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
e[i] = { a,b,c };
}
sort(e, e + m);
for (int i = 1; i <= n; i++)
p[i] = i;
int ans = 0;
for (int i = 0; i < m; i++) {
int a = e[i].a, b = e[i].b, c = e[i].c;
a = find(a), b = find(b);
if (a != b) {
p[b] = a;
ans += c;
}
}
int x = p[1],flag=1;
for (int i = 1; i < n; i++) {
if (p[i] != x) {
flag = 0;
break;
}
}
if (flag)
printf("%d", ans);
else
printf("Impossible");
return 0;
}
kruskal算法求最小生成树
最新推荐文章于 2023-06-12 17:10:43 发布