【最小生成树】+【并查集】-HDU-1233-还是畅通工程

来源:互联网 发布:大数据 项目需求分析 编辑:程序博客网 时间:2024/05/29 07:06

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233点击打开链接

题目描述:

还是最小生成树的问题,输出能让村村相通的最小修路总长度。

解题思路:

和那个卡车编号几乎一样,kruscal算法解决。因为有了经验,这次1A了。

AC代码:

#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;typedef struct Line{    int u;    int v;    int w;};const int MAXN=110;int arr[MAXN];Line lines[MAXN*MAXN/2];bool cmp(Line a,Line b){    return a.w<b.w;}int find_father(int x){    return x==arr[x]?x:arr[x]=find_father(arr[x]);}int main(){    //freopen("hdu1233.txt","r",stdin);    int n,i,ans;    while(scanf("%d",&n),n)    {        int nn=n*(n-1)/2;        memset(lines,0,sizeof(lines));        ans=0;        for(i=0;i<MAXN;i++)            arr[i]=i;        for(i=0;i<nn;i++)        {            scanf("%d%d%d",&lines[i].u,&lines[i].v,&lines[i].w);        }        sort(lines,lines+nn,cmp);        for(i=0;i<nn;i++)        {            int fu=find_father(lines[i].u);            int fv=find_father(lines[i].v);            if(fv!=fu)            {                arr[fv]=fu;                ans+=lines[i].w;            }        }        printf("%d\n",ans);    }}

AC截图:



0 0
原创粉丝点击