CODEVS 1231最优布线问题

来源:互联网 发布:百度地图api php开发 编辑:程序博客网 时间:2024/05/17 07:18
#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;int n,m,aa,bb,cc,cur=0,p[1000100],k=0;long long ans=0;struct node{    int u,v,value;}a[1000100];int cmp(struct node aa,struct node bb){    return aa.value<bb.value;}int find(int i){    return p[i]==i?i:p[i]=find(p[i]);}int main(){    scanf("%d%d",&n,&m);    for(int i=1;i<=m;i++){        scanf("%d%d%d",&aa,&bb,&cc);        a[cur].u=aa;        a[cur].v=bb;        a[cur].value=cc;        cur++;    }    sort(a,a+cur,cmp);    for(int i=1;i<=n;i++) p[i]=i;    for(int i=0;i<m;i++){        int uu=find(a[i].u);        int vv=find(a[i].v);        if(vv!=uu){            ans+=a[i].value;            p[uu]=vv;        }    }    printf("%lld",ans);//注意!!!!!long long 型用%lld输出!!!!!    return 0;}

题解:基本也是一个裸的Kruskal算法,与CODEVS 1078 最小生成树不同的是,本题并不是所有的点都是可以连通的。但事实上,在编写程序时与CODEVS 1078 最小生成树并没有什么太大的区别,主要的不同点就是–我们在用a[]结构体构造图的时候只连接了可以连接的点,仅此而已。

0 0