zoukankan      html  css  js  c++  java
  • HDU 1233 还是畅通工程(模板——克鲁斯卡尔算法)

    题目链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=1233

    题意描述:

    输入n个城镇以及n*(n-1)/2条道路信息

    计算并输出将所有城镇连通或者间接连通需要修建的最短道路的总长度

    解题思路:

    最小生成树问题模板题,使用克鲁斯卡尔算法即可。

    AC代码:

     1 #include<stdio.h>
     2 #include<algorithm>
     3 using namespace std;
     4 
     5 struct edge
     6 {
     7     int u,v,w;
     8 };
     9 struct edge e[100010];
    10 int cmp(struct edge x,struct edge y)
    11 {
    12     return x.w < y.w;
    13 }
    14 int f[1000];
    15 int merge(int u,int v);
    16 int getf(int u);
    17 int main()
    18 {
    19     int i,n,m,sum,count;
    20     while(scanf("%d",&n),n != 0)
    21     {
    22         m=n*(n-1)/2;
    23         for(i=1;i<=m;i++)
    24             scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
    25         sort(e+1,e+m+1,cmp);
    26         for(i=1;i<=n;i++)
    27             f[i]=i;
    28         count=0;
    29         sum=0;
    30         for(i=1;i<=m;i++)
    31         {
    32             if( merge(e[i].u,e[i].v) )
    33             {
    34                 count++;
    35                 sum += e[i].w;
    36             }
    37             if(count==n-1)
    38             break;
    39         }
    40         printf("%d
    ",sum);
    41     }
    42     return 0;
    43 }
    44 int  merge(int u,int v)
    45 {
    46     int t1,t2;
    47     t1=getf(u);
    48     t2=getf(v);
    49     if(t1 != t2)
    50     {
    51         f[t2]=t1;
    52         return 1;
    53     }
    54     return 0;
    55 }
    56 int getf(int u)
    57 {
    58     if(f[u]==u)
    59     return u;
    60     else
    61     {
    62         f[u]=getf(f[u]);
    63         return f[u];
    64     }
    65 }
  • 相关阅读:
    php单例设计模式
    js实用技巧
    快速排序java实现
    PHP大小写问题
    http转https
    wx-charts 微信小程序图表插件
    如何判断微信内置浏览器 MicroMessenger
    小程序:下拉加载更多时bindscrolltolower多次执行
    PHP内核
    CSS的4种引入方式以及优先级
  • 原文地址:https://www.cnblogs.com/wenzhixin/p/7365250.html
Copyright © 2011-2022 走看看