打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
最小生成树1233
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include <algorithm>

using namespace std;
/*
typedef struct node
{
  int a;
  int b;
  int number;
  int length;
};
node [100];*/
int p[5002];
int u[100],v[100],w[100];
int cmp(const int i,const int j)
{
    return w[i]<w[j];
}
int find(int x)
{
 return p[x]==x?x:p[x]=find(p[x]);
}
int kruskal(int u[],int v[],int w[],int n)
{
    int ans=0;
    int r[100];
    for(int i=0;i<n*(n-1)/2;i++)p[i]=i;
    for(int i=0;i<n*(n-1)/2;i++)r[i]=i;
    sort(r,r+n*(n-1)/2,cmp);
    for(int i=0;i<n*(n-1)/2;i++)
    {
    int e=r[i];
    int x=find(u[e]);
    int y= find(v[e]);
    if(x!=y){ans+=w[e];p[x]=y;}
    }
    return ans;
}
int main()                 //妹的、、ac不了、、气死了、、第一棵树、、
 {
int n,i;
int min;
while(scanf("%d",&n)&&n)
{  
   memset(p,0,sizeof(p));
for(i=0;i<n*(n-1)/2;i++)
scanf("%d %d %d",&u[i],&v[i],&w[i]);
min=kruskal(u,v,w,n);
printf("%d\n",min);
}
 system("pause");
 return 0;
 }



别人的、、
#include <stdio.h>
#include<stdlib.h>
#include <algorithm>

using namespace std;
struct node
{  int x,y;
    int z;
}shu[50000];
int p[50000];
int findx(int x)
{/*
    int r;
    r=x;
    while(r!=p[r])
    {
        r=p[r];
    }
 p[r]=r;
    return r;*/
    if(x==p[x])
        return x;
    p[x]=findx(p[x]);
    return p[x];
}
int connect(int x,int y)
{
    int q,w;
    q=findx(x);
    w=findx(y);
    /*
    if(q!=w)
    {
        if(q>w)
        {p[q]=w;}
        else {p[w]=q;}
        return 1;
    }
    else return 0;*/
    if(q==w)
        return 0;
    p[w]=q;
    return 1;
}
/*
int cmp(const void *aa,const void*bb)
{
      return((*(struct node*)aa).z-(*(struct node*)bb).z);

}*/
int cmp(node a,node b)
{
    return a.z<b.z;
}
int main()
{
//    freopen("in.txt","r",stdin);
    int n,t,i,sum,m;
    while(scanf("%d",&n)&&n)
    {
        t=(n-1)*n/2;
        for(i=0;i<=t;i++)
            p[i]=i;
        for(i=0;i<t;i++)
        {
            scanf("%d%d%d",&shu[i].x,&shu[i].y,&shu[i].z);
        }
        //qsort(shu,t+1,sizeof(shu[0]),cmp);
        sort(shu,shu+t,cmp);
        sum=0;
        m=1;
        for(i=0;i<t;i++) {
            if(connect(shu[i].x,shu[i].y)){m++;sum+=shu[i].z;}
        }
        printf("%d\n",sum);
    }


        return 0;}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
C和指针学习
qsort的cmp函数理解
20190709 暑训 区间种类数
C语言写的简易水果管理系统
经典程序100例(71-80)
单向链表、双向链表,栈,队列的C语言的实现方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服