zoukankan      html  css  js  c++  java
  • [啊哈算法]镖局运镖(最小生成树)

    Description

    最近小哼迷上了《龙门镖局》,从恰克图道武夷山,从张家口道老河口,从迪化道佛山,从蒙自道奉天......古代镖局的运镖,也就是现在的物流。镖局每到一个地方开展业务,都需要堆运镖途中的绿林好汉进行打点(不给钱就不让过路)。好说话的打点费就比较低,不好说话的打点费就比较高。城镇类似如下,顶点是城镇编号,边上的值表示这条道路上打点绿林好汉需要的银子数。

    请你帮镖局算算,如果从1号城镇出发,遍历每个城镇最少需要准备多少打点银子?

    Input

    输入第一行包括两个正整数n,m。n代表城镇个数,m表示道路个数(1 < n,m < 100)。

    后面的m行分别包含三个正整数a,b,c,表示在从城镇a 到 城镇b的道路上需要交纳的银子数。

    
    

    Output

    输出从1号城镇出发,遍历每个城镇最少需要准备的银子数。

    Sample Input

    6 9
    2 4 11
    3 5 13
    4 6 3
    5 6 4
    2 3 6
    4 5 7
    1 2 1
    3 4 9
    1 3 2
    

    Sample Output

    19

    这是kruskal算法

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 struct edge{//用结构体来存储边的信息 
     5     int u;
     6     int v;
     7     int w;
     8 };
     9 int n,m;
    10 int f[103];
    11 int num=0,sum=0;//num表示边的数量,sum表示最小生成树的总权 
    12 int cmp(edge x,edge y){//自定义排序方式 
    13     return x.w<y.w;
    14 }
    15 int getf(int x){//找祖宗的函数 
    16     if(f[x]==x)
    17         return x;
    18     else{
    19         f[x]=getf(f[x]);
    20         return f[x];
    21     }    
    22 }
    23 int merge(int x,int y){//合并两个集合 
    24     int t1=getf(x);
    25     int t2=getf(y);
    26     if(t1!=t2){
    27         f[t2]=t1;
    28         return 1;
    29     }
    30     return 0;
    31 }
    32 int main(){
    33     struct edge e[103];
    34     cin>>n>>m;
    35     for(int i=1;i<=m;i++){
    36         cin>>e[i].u>>e[i].v>>e[i].w;
    37     }
    38     for(int i=1;i<=n;i++){
    39         f[i]=i;
    40     }
    41     sort(e+1,e+m+1,cmp);//stl排序 
    42     for(int i=1;i<=m;i++){//核心语句:先遍历每条边 
    43         if(merge(e[i].u,e[i].v)){//如果这两个点没有相通 
    44             num++;//增加最小生成树的一条边 
    45             sum+=e[i].w;//总权值增加 
    46         }
    47         if(num==n-1){//最小生成树共有n-1条边 
    48             break;
    49         }
    50     }
    51     cout<<sum;
    52     return 0;
    53 } 



  • 相关阅读:
    黑产上演《三体》剧情:蠕虫病毒入侵手机群发“钓鱼”短信
    安天AVL联合小米MIUI首擒顽固病毒“不死鸟”
    阿里云存储OSS服务端签名客户端直传
    mariadb 安装配置
    NPOI 打印设置
    windows2008 r2 网络负载均衡搭建
    SqlServer数据库技巧
    达梦数据库备份还原
    ASP.NET CORE Docker发布记录
    DataReader转换
  • 原文地址:https://www.cnblogs.com/fate-/p/12248540.html
Copyright © 2011-2022 走看看