#include <bits/stdc++.h>
using namespace std;
const int N = 5050;
int n, m;
struct node {
int to, w;
node() {}
node(int To, int W) {to = To, w = W;}
};
vector <node> e[N];
int dist[N];
set <pair <int, int>> q;
//bool b[N];
int prim() {
memset(dist, 127, sizeof(dist));
dist[1] = 0;
q.clear();
int ans = 0, tot = 0;
for (int i = 1; i <= n; i++) q.insert({dist[i], i});
while (!q.empty()) {
int x = q.begin()->second;
q.erase(q.begin());
if (dist[x] > 1 << 30) break;
ans += dist[x];
++tot;
//b[x] = 1;
for (auto y : e[x])
if (dist[y.to] > y.w) { // if (!b[y.to] && dist[y.to] > y.w) {
q.erase({dist[y.to], y.to});
dist[y.to] = y.w;
q.insert({dist[y.to], y.to});
}
}
if (tot != n) return -1;
return ans;
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i++) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
e[u].push_back(node(v, w));
e[v].push_back(node(u, w));
}
int ans = prim();
if (ans == -1) printf("orz\n");
else printf("%d\n", ans);
return 0;
}
为什么 dijkstra 没有标记而 prim 需要标记呢??