zoukankan      html  css  js  c++  java
  • Problem D

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

    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

    题意:这两个题都是给出每条公路的联通情况和距离,让你求出最小路径;

    解题思路:这两个输入同一种题型,一开始看了prim算法不大理解,就自己想,想到了贪心,将每条路的距离先按照从短到长的排列,之后从头开始查找两个城市是不是在有同一个根,肯定不是的,因为每条路都需要你来建,然后一直枚举知道整个城市联通了就是了;

    感悟:期末考试的氛围越来越浓了,真是愁人啊!

    代码:

    #include

    #define M 120

    #define INF 0x3f3f3f3f

    using namespace std;

    int bin[M],m[M][M];

    struct node

    {

        int i,j,w;//i,j表示的是从ij,需要w的距离

    };

    node fr[M*M];

    bool comp(node &a,node &b)

    {

        return a.w

    }

    int findx(int x)//找根

    {

        int r=x;

        while(bin[r]!=r)

            r=bin[r];

        return r;

    }

    int kruskal(int n,int m)

    {

        sort(fr,fr+m,comp);//将需要的距离从小到大排列

        int ans=0;

        for(int i=0;i

        {

            int fx=findx(fr[i].i);

            int fy=findx(fr[i].j);

            //cout<<fx<<" "<<fy<<endl;

            if(fx!=fy)

            {

                ans+=fr[i].w;

                bin[fx]=fy;

                //cout<<"YES"<<endl;

            }

        }

        return ans;

    }

    int main()

    {

        //freopen("in.txt","r",stdin);

        int n,t;

        while(scanf("%d",&n)!=EOF&&n)

        {

            for(int i=1;i<=n;i++)

                bin[i]=i;

            for(int i=0;i

                scanf("%d%d%d",&fr[i].i,&fr[i].j,&fr[i].w);

            int ans=kruskal(n,n*(n-1)/2);

            printf("%d ",ans);

        }

        return 0;

     

    }

    题意:这两个题都是给出每条公路的联通情况和距离,让你求出最小路径;

     

    解题思路:这两个输入同一种题型,一开始看了prim算法不大理解,就自己想,想到了贪心,将每条路的距离先按照从短到长的排列,之后从头开始查找两个城市是不是在有同一个根,肯定不是的,因为每条路都需要你来建,然后一直枚举知道整个城市联通了就是了;

     

    感悟:期末考试的氛围越来越浓了,真是愁人啊!

     

    代码:

     

    #include

     

    #define M 120

     

    #define INF 0x3f3f3f3f

     

    using namespace std;

     

    int bin[M],m[M][M];

     

    struct node

     

    {

     

        int i,j,w;//i,j表示的是从ij,需要w的距离

     

    };

     

    node fr[M*M];

     

    bool comp(node &a,node &b)

     

    {

     

        return a.w

     

    }

     

    int findx(int x)//找根

     

    {

     

        int r=x;

     

        while(bin[r]!=r)

     

            r=bin[r];

     

        return r;

     

    }

     

    int kruskal(int n,int m)

     

    {

     

        sort(fr,fr+m,comp);//将需要的距离从小到大排列

     

        int ans=0;

     

        for(int i=0;i

     

        {

     

            int fx=findx(fr[i].i);

     

            int fy=findx(fr[i].j);

     

            //cout<<fx<<" "<<fy<<endl;

     

            if(fx!=fy)

     

            {

     

                ans+=fr[i].w;

     

                bin[fx]=fy;

     

                //cout<<"YES"<<endl;

     

            }

     

        }

     

        return ans;

     

    }

     

    int main()

     

    {

     

        //freopen("in.txt","r",stdin);

     

        int n,t;

     

        while(scanf("%d",&n)!=EOF&&n)

     

        {

     

            for(int i=1;i<=n;i++)

     

                bin[i]=i;

     

            for(int i=0;i

     

                scanf("%d%d%d",&fr[i].i,&fr[i].j,&fr[i].w);

     

            int ans=kruskal(n,n*(n-1)/2);

     

            printf("%d ",ans);

     

        }

     

        return 0;

     

    }

     

     

  • 相关阅读:
    java基础部分的一些有意思的东西。
    antdvue按需加载插件babelpluginimport报错
    阿超的烦恼 javaScript篇
    .NET E F(Entity Framework)框架 DataBase First 和 Code First 简单用法。
    JQuery获得input ID相同但是type不同的方法
    gridview的删除,修改,数据绑定处理
    jgGrid数据格式
    Cannot read configuration file due to insufficient permissions
    Invoke action which type of result is JsonResult on controller from view using Ajax or geJSon
    Entity model数据库连接
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/5781531.html
Copyright © 2011-2022 走看看