zoukankan      html  css  js  c++  java
  • 还是畅通工程(最小生成树入门基础题)

    某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。

    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
    
    
            
     
    Huge input, scanf is recommended.

    Hint

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    struct node
    {
        int x, y, val;
    }road[100005];
    int pre[200];
    int Find(int x)
    {
        if(x==pre[x])
        {
              return x;
        }
        else
        {
            return pre[x]=Find(pre[x]);
        }
    }
    bool merge(int x,int y)
    {
        int fx=Find(x);
        int fy=Find(y);
        if(fx!=fy)
        {
            pre[fx]=fy;
            return true;
        }
        else
        {
            return false;
        }
        
    }
    bool cmp(node x,node y)
    {
        return x.val<y.val;
    }
    int main()
    { 
        int n,m;
        while(scanf("%d",&n)&&n)
        {
            m=n*(n-1)/2;
            for(int t=1;t<=m;t++)
            {
                scanf("%d%d%d",&road[t].x,&road[t].y,&road[t].val);
            } 
            sort(road+1,road+m+1,cmp);
            for(int t=1;t<=n;t++)
            {
                pre[t]=t;
            }
            int cnt=0;
            long long int sum=0;
            for(int t=1;t<=m;t++)
            {
                if(merge(road[t].x,road[t].y))
                {
                    cnt++;
                     sum+=road[t].val;
                    if(cnt==n-1)
                    break;
                
                }
            }
            printf("%lld
    ",sum);
            
        }
        return 0;
    }
  • 相关阅读:
    html中滚动条的样式
    在个人机上发布web项目
    Apache与SVN的集成
    待完成
    chmod
    【转】ubuntu修改IP地址和网关的方法
    ubuntu 添加svn服务
    生成指定大小的空文件
    数码单反相机完全攻略
    【转】ubuntu subversion安装
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10782106.html
Copyright © 2011-2022 走看看