zoukankan      html  css  js  c++  java
  • SDUT ACM 2144 最小生成树,克鲁斯卡尔模板 Anti

    图结构练习——最小生成树

    Time Limit: 1000MS    Memory limit: 65536K

    题目描述

     有n个城市,其中有些城市之间可以修建公路,修建不同的公路费用是不同的。现在我们想知道,最少花多少钱修公路可以将所有的城市连在一起,使在任意一城市出发,可以到达其他任意的城市。
     

    输入

     输入包含多组数据,格式如下。
    第一行包括两个整数n m,代表城市个数和可以修建的公路个数。(n<=100)
    剩下m行每行3个正整数a b c,代表城市a 和城市b之间可以修建一条公路,代价为c。
     

    输出

     每组输出占一行,仅输出最小花费。

    示例输入

    3 2
    1 2 1
    1 3 1
    1 0
    

    示例输出

    2
    0
    

     

     1 #include<stdio.h>
     2 #include<algorithm>
     3 struct Edge
     4 {
     5     int u, v, w;
     6 }edge[10010];
     7 
     8 int n, m, set[110];
     9 
    10 int cmp(const struct Edge x, const struct Edge y)
    11 {
    12     return x.w < y.w;
    13 }
    14 
    15 int find(int x)
    16 {
    17     while(x != set[x])
    18         x = set[x];
    19     return x;
    20 }
    21 
    22 int Kruskal()
    23 {
    24     int ans = 0;
    25     for(int i = 1; i <= n; i++)
    26         set[i] = i;
    27     std::sort(edge, edge+m, cmp);
    28     for(int i = 0; i < m; i++)
    29     {
    30         int x = find(edge[i].u);
    31         int y = find(edge[i].v);
    32         if(x != y)
    33         {
    34             ans += edge[i].w;
    35             set[x] = y;
    36         }
    37     }
    38     return ans;
    39 }
    40 
    41 int main()
    42 {
    43     while(~scanf("%d %d", &n, &m))
    44     {
    45         for(int i = 0; i < m; i++)
    46             scanf("%d %d %d", &edge[i].u, &edge[i].v, &edge[i].w);
    47         printf("%d\n", Kruskal());
    48     }
    49     return 0;
    50 }
  • 相关阅读:
    Java编码思想之什么是高内聚低耦合?
    hadoop中block副本的放置策略
    服务器组网的过程
    服务器的类型
    hadoop学习笔记(一):NameNade持久化和DataNode概念
    js中的局部函数和全局函数的调用
    对于javaScript中的alert和document.write()的执行顺序的记录
    常用工具api等链接
    js函数声明外面使用小括号括起来再接一个小括号的写法
    LVS的概念和重要性
  • 原文地址:https://www.cnblogs.com/wolfred7464/p/3019839.html
Copyright © 2011-2022 走看看