• HDoj-1863-畅通project-并查集


    畅通project
    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 17006    Accepted Submission(s): 7140




    Problem Description
    省政府“畅通project”的目标是使全省不论什么两个村庄间都能够实现公路交通(但不一定有直接的公路相连,
    仅仅要能间接通过公路可达就可以)。

    经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。
    现请你编敲代码。计算出全省畅通须要的最低成本。




    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

    ?

    #include <stdio.h> 
    #include<string.h>
    #include <algorithm>
    using namespace std;
    struct Road
    {
        int c1, c2, cost;
    };
    Road road[110];
    
    bool cmp(Road a,Road b)
    {
        return a.cost<b.cost;
    }
    int city[110];
    
    int find(int a)
    {
        int r=a;
        while(city[r]!=r)
           r=city[r];
        return r;
    }
    bool merge(int x, int y)
    {
        int fx,fy;
         fx = find(x);
         fy = find(y);
        if(fx == fy)   return 0;
        else if(fx < fy)
               city[fy] = fx;
        else
               city[fx] = fy;
    return 1;
    } 
    
    int main()
    {
        int n, m;                         
        while(scanf("%d %d", &m, &n) && m)
        {
            int i;
            for(i=1;i<=n;i++) 
            {
                city[i]=i;
            }
            for(int i=0; i<m; ++i)
                scanf("%d %d %d", &road[i].c1, &road[i].c2, &road[i].cost);
            sort(road, road+m,cmp);
            int sum = 0, count = 0;
            for(int i=0; i<m; i++)
            {
                if(merge(road[i].c1, road[i].c2))
                {
                    count ++;
                    sum += road[i].cost;
                }
                if(count == n-1)
                    break;
            }
            if(count == n-1)
                printf("%d
    ", sum);
            else
                printf("?

    "); } return 0; }



  • 相关阅读:
    javascript和jquery如何判断元素是否存在最佳。
    Sping中Bean配置的深入探讨
    Spring基于 Annotation 的简单介绍
    Sping中的配置Bean详解
    Sping框架概述
    Hibernate中的HQL语言
    Hibernate的检索策略和优化
    Hibernate表关系映射之多对多映射
    Hibernate表关系映射之一对多映射
    Hibernate表关系映射之一对一映射
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6697407.html
Copyright © 2020-2023  润新知