• 1024.畅通工程


    题目描述:

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

    输入:

    测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M (N, M < =100 );随后的 N 行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。当N为0时,全部输入结束,相应的结果不要输出。

    输出:

    对每个测试用例,在1行里输出全省畅通需要的最低成本。若统计数据不足以保证畅通,则输出“?”。

    样例输入:

    3 3
    1 2 1
    1 3 2
    2 3 4
    1 3
    2 3 2
    0 100
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    样例输出:

    3
    ?
    #include<stdio.h>
    #include<algorithm>
    #include<iostream> 
    using namespace std;
    
    #define N 101
    
    int tree[N];
    int findroot(int x){
        if(tree[x]==-1) return x;
        else {
            int temp=findroot(tree[x]);
            tree[x]=temp;
            return temp;
        }
    }
    
    struct edge{
        int a,b;
        int cost;
        bool operator < (const edge &A) const {
             return cost<A.cost;
        }
    }edge[10000];
    
    int main(){
        int n,m;
        while(scanf("%d%d",&n,&m)!=EOF && n!=0){
            for(int i=1;i<=n;i++){
                scanf("%d%d%d",&edge[i].a,&edge[i].b,&edge[i].cost);
            }
            sort(edge+1,edge+1+n);
            for(int i=1;i<=m;i++) tree[i]=-1;
            int ans=0;
            for(int i=1;i<=n;i++){
                int a=findroot(edge[i].a);
                int b=findroot(edge[i].b);
                if(a!=b){
                    tree[a]=b;
                    ans+=edge[i].cost;
                }
            }
            int num=0;
            for(int i=1;i<=m;i++){
                if(tree[i]==-1) num++;
            }
            if(num>1) cout<<"?"<<endl;
            else cout<<ans<<endl;
        }
        return 0;
    }
  • 相关阅读:
    经常使用排序算法时间复杂度和空间复杂度简析
    Android触碰事件
    opencv矩阵运算(2)
    [ACM] HDU 1400 Mondriaan&#39;s Dream (状态压缩,长2宽1长方形铺满)
    指针知识梳理8- 指针的指针
    Git学习笔记(一)
    Object-c Associated Object
    YTUOJ-计算该日在本年中是第几天(用户自己定义类型)
    MYSQL源代码编译的变动
    手机端小问题整理
  • 原文地址:https://www.cnblogs.com/bernieloveslife/p/9736555.html
Copyright © 2020-2023  润新知