您的位置:首页 > 其它

题目1017:还是畅通工程(最小生成树初步应用)

2017-04-18 22:49 351 查看
题目链接:http://ac.jobdu.com/problem.php?pid=1017

详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus

参考代码:

//
//  1017 还是畅通工程.cpp
//  Jobdu
//
//  Created by PengFei_Zheng on 18/04/2017.
//  Copyright © 2017 PengFei_Zheng. All rights reserved.
//

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <cmath>
#define MAX_SIZE 110

using namespace std;

int tree[MAX_SIZE];

int findRoot(int x){
if(tree[x] == -1) return x;
else{
int tmp = findRoot(tree[x]);
tree[x] = tmp;
return tmp;
}
}

struct Edge{
int a, b;
int cost;
bool operator < (const Edge &A) const{
return cost < A.cost;
}
Edge(){
a = 0;
b = 0;
cost = 0;
}
};

int n;
int main(){
while(scanf("%d",&n)!=EOF && n!=0){
Edge edge[n*(n-1)/2+1];
for(int i = 1 ; i <= n*(n-1)/2 ; i++){
scanf("%d%d%d",&edge[i].a,&edge[i].b,&edge[i].cost);
}
sort(edge+1, edge+1+n*(n-1)/2);
for(int i = 1 ; i <= n ; i++){
tree[i] = -1;
}
int ans = 0;
for(int i = 1 ; i <= n*(n-1)/2 ; i++){
int a = findRoot(edge[i].a);
int b = findRoot(edge[i].b);
if(a!=b){
tree[a] = b;
ans+=edge[i].cost;
}
}
printf("%d\n",ans);
}
return 0;
}
/**************************************************************
Problem: 1017
User: zpfbuaa
Language: C++
Result: Accepted
Time:20 ms
Memory:1520 kb
****************************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: