• HDU 1863 畅通工程 克鲁斯卡尔算法


    畅通工程

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 15175    Accepted Submission(s): 6303


    Problem Description
    省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。
     
    Input
    测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M ( < 100 );随后的 N
    行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。当N为0时,全部输入结束,相应的结果不要输出。
     
    Output
    对每个测试用例,在1行里输出全省畅通需要的最低成本。若统计数据不足以保证畅通,则输出“?”。
     
    Sample Input
    3 3
    1 2 1
    1 3 2
    2 3 4
    1 3
    2 3 2
    0 100
    Sample Output
    3
    ?
    讲解:本题用到的是:Kruskal 算法
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<string>
     6 #include<cmath>
     7 #include<map>
     8 #include<queue>
     9 using namespace std;
    10 struct T
    11 {
    12     int x,y,z;
    13 }num[1000];
    14 int cmp(T a, T b)
    15 {
    16     if(a.z < b.z)
    17         return 1;
    18     return 0;
    19 }
    20 int main()
    21 {
    22     int i,j,k,t,m,n,g,a[1000];
    23     while(cin>>n>>m && n)
    24     {
    25         int ans=0,sum=0;
    26         for(i=0;i<=m;i++)
    27               a[i]=i;
    28         for( i=1; i<=n; i++)
    29               cin>>num[i].x>>num[i].y>>num[i].z;
    30               sort(num+1,num+n+1,cmp);
    31         for(i=1;i<=n && sum<m-1 ; i++)
    32         {
    33             for(k=num[i].x ; a[k]!=k ;k=a[k])
    34                  a[k]=a[a[k]];
    35             for(g=num[i].y ; a[g]!=g ;g=a[g])
    36                  a[g]=a[a[g]];
    37             if(k!=g)
    38             {
    39                 a[g]=k;
    40                 ans=ans+num[i].z;
    41                 sum++;
    42             }
    43         }
    44         if(sum==m-1)
    45             cout<<ans<<endl;
    46         else cout<<"?"<<endl;
    47     }
    48     return 0;
    49 }
  • 相关阅读:
    遍历frame中的表单:
    java分页算法
    将oracle数据库表使用命令的形式导入到excle文件中 亲测可用!
    关于解决java读取excel文件遇空行抛空指针的问题 !
    对Excle的行和列进行检查 单元格类型转换代码 ;
    java读取xls和xlsx数据作为数据驱动来用
    关于java读取excle文件的相关方法 ;
    转 Maven常用仓库地址以及手动添加jar包到仓库
    Luogo P2324 [SCOI2005]骑士精神
    Luogu P2483 【模板】k短路([SDOI2010]魔法猪学院)
  • 原文地址:https://www.cnblogs.com/lovychen/p/3671122.html
Copyright © 2020-2023  润新知