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

    省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。 

    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
    ?


    这题是也是一个并查集。略微加了点东西,适用于并查集入门
     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 #define maxn 1010
     7 int a[maxn];
     8 struct node {
     9     int x,y,cost;
    10 } qu[maxn];
    11 int find(int r) {
    12     while(r!=a[r]) r=a[r];
    13     return r;
    14 }
    15 int cmp(node a,node b) {
    16     return a.cost<b.cost;
    17 }
    18 int main() {
    19     int n,m;
    20     while(scanf("%d%d",&n,&m)!=EOF) {
    21         if (n==0) break;
    22         for (int i=1 ; i<=m ; i++) a[i]=i;
    23         for (int i=0 ; i<n ; i++) {
    24             scanf("%d%d%d",&qu[i].x,&qu[i].y,&qu[i].cost);
    25         }
    26         sort(qu,qu+n,cmp);
    27         int ans=0;
    28         node b;
    29         for (int i=0 ; i<n ; i++) {
    30             b=qu[i];
    31             int nx=find(b.x);
    32             int ny=find(b.y);
    33             if (nx!=ny) {
    34                 a[nx]=ny;
    35                 ans+=b.cost;
    36             }
    37         }
    38         int flag=1;
    39         for (int i=1 ; i<=m ; i++) {
    40             if (find(1)!=find(i)) {
    41                 flag=0;
    42                 break;
    43             }
    44         }
    45         if (flag) printf("%d
    ",ans);
    46         else printf("?
    ");
    47     }
    48     return 0;
    49 }
     
  • 相关阅读:
    (转)MVC 与三层架构
    (转)CentOS一键安装Nginx脚本
    (转)Python异常类的继承关系
    CMFCPropertyGridProperty用法
    C语言终极面试及答案分析
    C/C++函数指针(typedef简化定义)
    UNIX 家族及Linux
    Socket的综合应用总结
    Socket模型(二):完成端口(IOCP)
    socket通信中select函数的使用和解释
  • 原文地址:https://www.cnblogs.com/qldabiaoge/p/8507641.html
Copyright © 2011-2022 走看看