zoukankan      html  css  js  c++  java
  • hihoCoder#1098 最小生成树二·Kruscal算法

    原题地址

    以前没写过Kruscal算法,写了才知道原来比Prime算法简单多了。。。

    并查集的应用太经典了!

    代码:

     1 #include <iostream>
     2 #include <cstdlib>
     3 
     4 using namespace std;
     5 
     6 #define MAX_EDGE 1000008
     7 #define MAX_POINT 100008
     8 
     9 struct Edge {
    10   int a;
    11   int b;
    12   int len;
    13 };
    14 
    15 int mycmp(const void *a, const void *b) {
    16   Edge *pa = (Edge *) a;
    17   Edge *pb = (Edge *) b;
    18   return pa->len - pb->len;
    19 }
    20 
    21 int N, M;
    22 Edge e[MAX_EDGE];
    23 int p[MAX_POINT];
    24 
    25 int find(int i) {
    26   if (p[i] == i)
    27     return i;
    28   return p[i] = find(p[i]);
    29 }
    30 
    31 void merge(int i, int j) {
    32   int pi = find(i);
    33   int pj = find(j);
    34   p[pi] = pj;
    35 }
    36 
    37 int kruscal() {
    38   int res = 0;
    39 
    40   qsort(e, M, sizeof(Edge), mycmp);
    41   for (int i = 0; i < M; i++) {
    42     if (find(e[i].a) == find(e[i].b))
    43       continue;
    44     res += e[i].len;
    45     merge(e[i].a, e[i].b);
    46   }
    47 
    48   return res;
    49 }
    50 
    51 int main() {
    52   scanf("%d%d", &N, &M);
    53   for (int i = 1; i <= N; i++)
    54     p[i] = i;
    55   for (int i = 0; i < M; i++)
    56     scanf("%d%d%d", &(e[i].a), &(e[i].b), &(e[i].len));
    57 
    58   printf("%d
    ", kruscal());
    59   return 0;
    60 }
  • 相关阅读:
    python之re模块
    python之shell
    python之zip打包
    shell 处理解析json
    shell 中的传参-字符串传参,dict传参
    xshell 快速复制粘贴设置
    openstack 块存储服务 cinder
    win10系统中安装java环境
    mac上安装pip
    解决 谷歌浏览器报欧呦 崩溃了
  • 原文地址:https://www.cnblogs.com/boring09/p/4396616.html
Copyright © 2011-2022 走看看