您的位置:首页 > 其它

图结构练习——最小生成树

2015-07-28 21:28 218 查看

图结构练习——最小生成树


Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^

题目描述

有n个城市,其中有些城市之间可以修建公路,修建不同的公路费用是不同的。现在我们想知道,最少花多少钱修公路可以将所有的城市连在一起,使在任意一城市出发,可以到达其他任意的城市。

输入

输入包含多组数据,格式如下。
第一行包括两个整数n m,代表城市个数和可以修建的公路个数。(n <= 100, m <=1000)
剩下m行每行3个正整数a b c,代表城市a 和城市b之间可以修建一条公路,代价为c。

输出

每组输出占一行,仅输出最小花费。

示例输入

3 2
1 2 1
1 3 1
1 0


示例输出

2
0

#include<bits/stdc++.h>

using namespace std;

int a[10000];

struct node
{
int a,b,c;
}t[10000];

bool cmp(node a,node b)
{
return a.c<b.c;
}

int find(int x)
{
int r=x;
while (r!=a[r])
r=a[r];
return r;
}

int main()
{
int n,m,s,i;
while (cin>>n>>m)
{
for (i=0;i<=n;i++)
a[i]=i;
for (i=0;i<m;i++)
{
cin>>t[i].a>>t[i].b>>t[i].c;
}
sort(t,t+m,cmp);
s=0;
for (i=0;i<m;i++)
{
int x=find(t[i].a);
int y=find(t[i].b);
if (x!=y)
{
a[x]=y;
s+=t[i].c;
}
}
cout<<s<<endl;
}
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: