最小生成树(整理篇)
#include <bits/stdc++.h>
using namespace std;
const int N = 400500, INF = 2147483647;
typedef pair<int, int> PII;bool st[N];
int n, m, dist[N], tot, ans;;
vector<PII> q[N];
void prim() {fill(dist, dist + 1 + n, INF);dist[1] = 0, dist[0] = INF;while(true) {int u = 0;for(int i = 1; i <= n; ++ i) {if(!st[i] && dist[i] < dist[u]) {u = i;}}if(!u) break;++ tot;st[u] = 1;ans += dist[u];for(auto & [v, w] : q[u]) {if(dist[v] > w) {dist[v] = w;}}}
}
int main() {cin >> n >> m;for(int i = 1; i <= m; ++ i) {int a, b, c;cin >> a >> b >> c;q[a].emplace_back(b, c), q[b].emplace_back(a, c);}prim();if(tot == n) cout << ans;else puts("orz");return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/973475.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!