zoukankan      html  css  js  c++  java
  • HDU 1233 还是畅通工程

    某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
     
    Input
    测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
    当N为0时,输入结束,该用例不被处理。
     
    Output
    对每个测试用例,在1行里输出最小的公路总长度。
     
    Sample Input
    3 1 2 1 1 3 2 2 3 4 4 1 2 1 1 3 4 1 4 1 2 3 3 2 4 2 3 4 5 0
     
    Sample Output
    3 5
     
    //最小生成树 Prim算法
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <string.h>
    using namespace std;
    int
    main()
    {

        int
    p[103][103],l[103];
        int
    n,m,i,j,x,y,sum;
        while
    (scanf("%d",&n),n)
        {
       m=(n-1)*n;
            m=(m>>1);
            memset(l,0,sizeof(l));
            for
    (i=0;i<m;i++)
            {

              scanf("%d%d%d",&x,&y,&sum);
              p[x][y]=p[y][x]=sum;
            }


          sum=0;
          l[1]=1;
          x=n-1;
          while
    (x--)//这里就是我学的prim算法基本模板了!
          {
         y=9999999;
           for
    (i=2;i<=n;i++)
             {

                if
    (!l[i]&&p[1][i]<y)
                 {

                   j=i;
                   y=p[1][i];
                 }
             }

            sum+=y;
            l[j]=1;
            for
    (i=2;i<=n;i++)
              if
    (!l[i]&&p[i][j]<p[1][i])
                 p[1][i]=p[i][j];

        }

        printf("%d\n",sum);
       }

        return
    0;
    }
  • 相关阅读:
    《淘宝网》为例,描述质量属性的六个常见属性场景
    《苏宁安全架构演进及实践》阅读总结
    《12306核心模型设计思路和架构设计》阅读心得
    放假个人总结七
    放假个人总结六
    放假个人总结五
    连接Oracle提示 ORA-28009: 应当以 SYSDBA 身份或 SYSOPER 身份建立 SYS 连接
    连接oracle无匹配协议
    CentOS 7下虚拟机没有网络
    CentOS 7安装时候没装ifconfig命令
  • 原文地址:https://www.cnblogs.com/372465774y/p/2430499.html
Copyright © 2011-2022 走看看