#include<bits/stdc++.h>
using namespace std;
#define MXN 110
#define MXM 110*55
int N,fa[MXN],ans;
struct Town
{
int a,b,c;
bool operator<(Town t){ return c < t.c;}
}t[MXM];
int find(int r)
{
if(r!=fa[r])
fa[r]=find(fa[r]);
return fa[r];
}
void merge(Town &t)
{
int t1=find(t.a);
int t2=find(t.b);
if(t1!=t2)
{
fa[t1]=t2;
ans+=t.c;
}
}
int main(void)
{
int M;
while(scanf("%d",&N)==1)
{
if(N==0)
break;
ans=0;
M=N*(N-1)/2;
for(int i=1;i<=M;i++)
{
scanf("%d %d %d",&t[i].a,&t[i].b,&t[i].c);
}
sort(t+1,t+1+M);
for(int i=1;i<=N;i++)
fa[i]=i;
ans=0;
for(int i=1;i<=M;i++)
{
merge(t[i]);
}
printf("%d\n",ans);
}
return 0;
}
hdoj 1233
最新推荐文章于 2021-08-29 11:55:04 发布
本文介绍了一种使用C++实现的高效算法,通过合并城镇间的道路连接,减少城市间旅行成本。通过定义城镇结构和比较运算,优化了城镇之间的连接计数,适用于大规模数据。核心部分包括find和merge函数,用于管理和合并城市节点。最终输出的是城市间最短路径的总和,为城市规划提供数据支持。
摘要由CSDN通过智能技术生成