您的位置:首页 > 其它

hdoj1863 畅通工程

2012-08-18 11:16 295 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863

此题与hdoj1233解法一样/article/8454391.html

#include <iostream>
#include <algorithm>
using namespace std;

int city[101];
struct Road {
int c1, c2, cost;
};
Road road[5051];
int cmp(const Road a, const Road b)
{
return a.cost < b.cost;
}
int Find(const int n)
{
if (city
== -1)
return n;
return city
= Find(city
);
}
int Merge(const int a, const int b)
{
int x = Find(a);
int y = Find(b);
if (x == y)
return 0;
if (x < y)
city[y] = x;
else
city[x] = y;
return 1;
}
int main()
{
int n, m;
int sum, count, i;
//	freopen("in.txt", "r", stdin);
while (cin >> n >> m && n) {
for (i = 0; i < n; i++) {
cin >> road[i].c1 >> road[i].c2 >> road[i].cost;
}
sort(road, road+n, cmp);
memset(city, -1, sizeof(city));
sum = count = 0;
for (i = 0; i < n; i++) {
if (Merge(road[i].c1, road[i].c2)) {
count ++;
sum += road[i].cost;
}
if (count == m-1) break;
}
if (count != m-1) cout << "?" << endl;
else cout << sum << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: