You are assigned to design network connections between certain points in a wide area. You are given a set of points in the area, and a set of possible routes for the cables that may connect pairs of points. For each possible route between two points, you are given the length of the cable that is needed to connect the points over that route. Note that there may exist many possible routes between two given points. It is assumed that the given possible routes connect (directly or indirectly) each two points in the area.
Your task is to design the network for the area, so that there is a connection (direct or indirect) between every two points (i.e., all the points are interconnected, but not necessarily by a direct cable), and that the total length of the used cable is minimal.

Input

The input file consists of a number of data sets. Each data set defines one required network. The first line of the set contains two integers: the first defines the number P of the given points, and the second the number R of given routes between the points. The following R lines define the given routes between the points, each giving three integer numbers: the first two numbers identify the points, and the third gives the length of the route. The numbers are separated with white spaces. A data set giving only one number P=0 denotes the end of the input. The data sets are separated with an empty line.
The maximal number of points is 50. The maximal length of a given route is 100. The number of possible routes is unlimited. The nodes are identified with integers between 1 and P (inclusive). The routes between two points i and j may be given as i j or as j i.

Output

For each data set, print one number on a separate line that gives the total length of the cable used for the entire designed network.

Sample Input

1 0

2 3
1 2 37
2 1 17
1 2 68 3 7
1 2 19
2 3 11
3 1 7
1 3 5
2 3 89
3 1 91
1 2 32 5 7
1 2 5
2 3 7
2 4 8
4 5 11
3 5 10
1 5 6
4 2 12 0
#include<iostream>
#include<algorithm>
using namespace std;
int ans=,tot=;
const int N = 1e5;
int f[];
struct ac{
int v,u,w;
}edge[N];
bool cmp(ac a,ac b){
return a.w<b.w;
}
inline int find(int x){
if(x!=f[x])f[x]=find(f[x]);return f[x];
}
inline int join(int x,int y,int w){
int fx=find(x),fy=find(y);
if(fx!=fy){
f[fx]=fy;ans+=w;tot++;
}
}
int main()
{
int n;string a,b;int m,w,cnt=;
while(cin>>n>>m){
ans=tot=cnt=;
for(int i = ;i <=n;++i)f[i]=i;
for(int i = ;i < m;++i){
cin>>edge[i].u>>edge[i].v>>edge[i].w;
}
sort(edge,edge+m,cmp);
for(int i = ;i < m;++i){
join(edge[i].u,edge[i].v,edge[i].w);
if(tot==n-)break;
}
cout<<ans<<endl;
}
return ;
}

最新文章

  1. Xcode最好用的日志打印方法
  2. 【其它】 MathJax - 网页中显示数学公式的终极武器
  3. 一个noconsole程序
  4. linux内核中jiffies的回绕问题【转】
  5. json 是什么
  6. Python可迭代对象、迭代器和生成器
  7. java JMS消息队列
  8. 《如何让TT T4模板输出多个文件(VS2010中)》-- access911.net 文章
  9. angular的那些事
  10. [LeetCode257]Binary Tree Paths
  11. ios NSString拼接方法总结
  12. 每天一个linux命令(41)--ping命令
  13. opencv 小程序170323
  14. 201521123057 《Java程序设计》第4周学习总结
  15. 5_Longest Palindromic Substring(Manacher) --LeetCode
  16. 8.2 Query 语句优化基本思路和原则
  17. 使用Visual Studio 2012远程调试Windows Azure网站
  18. [转]你真的了解 console 吗
  19. UVa 12549 机器人警卫(最小点覆盖)
  20. shared_ptr&amp;scoped_ptr&amp;weak_ptr

热门文章

  1. [Linux系统] (2)用户权限管理
  2. 【杂题】【CometOJ Contest #5】E:迫真大游戏【概率】【排列组合】【多项式】
  3. luoguP3353 在你窗外闪耀的星星
  4. Github 已经托管超过 1000 万个项目库
  5. ubuntu16.04修改host上外網
  6. Scala学习(二)——高级特性
  7. docker容器无法删除——状态Dead
  8. 阶段3 2.Spring_06.Spring的新注解_1 spring的新注解-Configuration和ComponentScan
  9. Oracle 数据字典视图(V$,GV$,X$)
  10. java:LeakFilling(struts2)