ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

POJ-1287:最下生成树入门题Kruskal

2020-02-19 15:42:20  阅读:273  来源: 互联网

标签:given Kruskal 1287 number points POJ between routes ll


题目:
You are assigned to design network connections between certain points in a wide area. You are given a set of points in the area, and a set of possible routes for the cables that may connect pairs of points. For each possible route between two points, you are given the length of the cable that is needed to connect the points over that route. Note that there may exist many possible routes between two given points. It is assumed that the given possible routes connect (directly or indirectly) each two points in the area.
Your task is to design the network for the area, so that there is a connection (direct or indirect) between every two points (i.e., all the points are interconnected, but not necessarily by a direct cable), and that the total length of the used cable is minimal.
Input
The input file consists of a number of data sets. Each data set defines one required network. The first line of the set contains two integers: the first defines the number P of the given points, and the second the number R of given routes between the points. The following R lines define the given routes between the points, each giving three integer numbers: the first two numbers identify the points, and the third gives the length of the route. The numbers are separated with white spaces. A data set giving only one number P=0 denotes the end of the input. The data sets are separated with an empty line.
The maximal number of points is 50. The maximal length of a given route is 100. The number of possible routes is unlimited. The nodes are identified with integers between 1 and P (inclusive). The routes between two points i and j may be given as i j or as j i.
Output
For each data set, print one number on a separate line that gives the total length of the cable used for the entire designed network.
Sample Input
1 0

2 3
1 2 37
2 1 17
1 2 68

3 7
1 2 19
2 3 11
3 1 7
1 3 5
2 3 89
3 1 91
1 2 32

5 7
1 2 5
2 3 7
2 4 8
4 5 11
3 5 10
1 5 6
4 2 12

0
Sample Output
0
17
16
26
AC代码:

#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
typedef long long ll;
const ll N=105;
ll ans,pp,r,fa[N];
struct Edge
{
    ll u,v,w;
}e[N*N];
bool comp(Edge x,Edge y)
{
    return x.w<y.w;//从小到大
}
void it(ll n)
{
    for(ll i=1;i<=n;i++)
        fa[i]=i;
}
ll fd(ll x)
{
    if(fa[x]!=x)
    {
        fa[x]=fd(fa[x]);
    }
    return fa[x];
}
ll mg(ll a,ll b)
{
    ll p=fd(a);
    ll q=fd(b);
    if(p==q) return 0;
    if(p>q) fa[p]=q;
    else fa[q]=p;
    return 1;
}
ll kls(ll n)
{
   ans=0;
   ll m=n*(n-1)/2;//边数
   for(ll i=0;i<m;i++)
        if(mg(e[i].u,e[i].v))
       {
           ans+=e[i].w;
           n--;
           if(n==1) return ans;
       }
       return 0;
}
int main()
{
 while(cin>>pp)
 {
     ll p=0;
     memset(fa,0,sizeof(0));
     if(pp==0) break;
     else
     {
         cin>>r;
         while(r--)
         {
            ll a,b,c;
            cin>>a>>b>>c;
            e[p].u=a;
            e[p].v=b;
            e[p++].w=c;
         }
         it(pp);
         sort(e,e+p,comp);
         ans=kls(pp);
         cout<<ans<<endl;
     }

 }
}

Flair. 发布了25 篇原创文章 · 获赞 7 · 访问量 482 私信 关注

标签:given,Kruskal,1287,number,points,POJ,between,routes,ll
来源: https://blog.csdn.net/Fla1r/article/details/104393622

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有