zoukankan      html  css  js  c++  java
  • 15.Kruskal算法求最小生成树

     

     

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int N = 200010;
     4 struct edge {
     5     int a, b, w;
     6     friend bool operator < (edge e1, edge e2) {
     7         return e1.w < e2.w;
     8     }
     9 } edges[N];
    10 int n, m;
    11 int p[N]; //并查集里面的p
    12 int find(int x) {
    13     if (p[x] != x) {
    14         p[x] = find(p[x]);
    15     }
    16     return p[x];
    17 }
    18 int main() {
    19     cin >> n >> m;
    20     for (int i = 0; i < m; i++) {
    21         int a, b, w;
    22         cin >> a >> b >> w;
    23         edges[i].a = a;
    24         edges[i].b = b;
    25         edges[i].w = w;
    26     }
    27     sort(edges, edges + m); //1.将所有边按照权重从小到大排序
    28     for (int i = 1; i <= n; i++) { //初始化并查集
    29         p[i] = i;
    30     }
    31     int res = 0, cnt = 0;
    32     //权重之和,边的数量
    33     for (int i = 0; i < m; i++) { //2.从小到大枚举每条边
    34         int a = edges[i].a, b = edges[i].b, w = edges[i].w;
    35         a = find(a), b = find(b);
    36         if (a != b) { //并查集,如果不连通
    37             p[a] = b; //加进来
    38             res += w;
    39             cnt++;
    40         }
    41     }
    42     if (cnt < n - 1) { //不连通
    43         cout << "impossible" << endl;
    44     } else {
    45         cout << res << endl;
    46     }
    47     return 0;
    48 }
  • 相关阅读:
    css 旋转
    html 旋转
    链表和数组的区别
    hashmap
    【java开发系列】—— 自定义注解
    java不确定参数个数方法例子
    mysql 删除
    linux下常用命令
    php的几种算法(转载)
    数据容器
  • 原文地址:https://www.cnblogs.com/fx1998/p/13338325.html
Copyright © 2011-2022 走看看