hdu1233---还是畅通工程 最小生成树(水)
来源:互联网 发布:长春java培训哪家好 编辑:程序博客网 时间:2024/04/30 01:44
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int x,y,value;
}city[102*102];//结构体记录城市和之间的权值
int father[102];//用于标记某个城市的根是那个城市
int n;
int num[102];//用于记录每棵树上的节点有多少
bool cmp(node a,node b)
{
return a.value<b.value;//升序排列
}
void init()//初始化
{
for(int i=1;i<=n;i++)
{
father[i]=i;num[i]=1;
}
}
int find_root(int son)//找根节点
{
if(son!=father[son])//使用递归方法
{
father[son]=find_root(father[son]);
}
return father[son];
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n==0) break;
for(int i=1;i<=n*(n-1)/2;i++)
{
scanf("%d%d%d",&city[i].x,&city[i].y,&city[i].value);
}
init();
sort(city+1,city+n*(n-1)/2+1,cmp);
int fx,fy,max=0;
for(int i=1;i<=n*(n-1)/2;i++)
{
fx=find_root(city[i].x);
fy=find_root(city[i].y);
if(fx!=fy)//只要根节点不相同,说明就不是一棵树上的,那么只要把他们连在一起,并加上权值就是使用最小的费用
{
father[fy]=fx;
max+=city[i].value;
}
if(num[fx]==n||num[fy]==n)//小优化:如果一棵树上满足有所有的节点,说明所有的城市都连在一起,停止就可以了
break;
}
printf("%d\n",max);
}
return 0;
}
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int x,y,value;
}city[102*102];//结构体记录城市和之间的权值
int father[102];//用于标记某个城市的根是那个城市
int n;
int num[102];//用于记录每棵树上的节点有多少
bool cmp(node a,node b)
{
return a.value<b.value;//升序排列
}
void init()//初始化
{
for(int i=1;i<=n;i++)
{
father[i]=i;num[i]=1;
}
}
int find_root(int son)//找根节点
{
if(son!=father[son])//使用递归方法
{
father[son]=find_root(father[son]);
}
return father[son];
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n==0) break;
for(int i=1;i<=n*(n-1)/2;i++)
{
scanf("%d%d%d",&city[i].x,&city[i].y,&city[i].value);
}
init();
sort(city+1,city+n*(n-1)/2+1,cmp);
int fx,fy,max=0;
for(int i=1;i<=n*(n-1)/2;i++)
{
fx=find_root(city[i].x);
fy=find_root(city[i].y);
if(fx!=fy)//只要根节点不相同,说明就不是一棵树上的,那么只要把他们连在一起,并加上权值就是使用最小的费用
{
father[fy]=fx;
max+=city[i].value;
}
if(num[fx]==n||num[fy]==n)//小优化:如果一棵树上满足有所有的节点,说明所有的城市都连在一起,停止就可以了
break;
}
printf("%d\n",max);
}
return 0;
}
0 0
- hdu1233---还是畅通工程 最小生成树(水)
- Hdu1233 - 还是畅通工程 - 最小生成树
- 最小生成树-hdu1233-还是畅通工程
- hdu1233还是畅通工程【最小生成树】
- HDU1233 还是畅通工程 【最小生成树】
- 最小生成树: HDU1233还是畅通工程
- hdu1233 还是畅通工程【最小生成树】
- hdu1233 还是畅通工程 ( 最小生成树)
- hdu1233 还是畅通工程(最小生成树 prim 算法)
- hdu1233 还是畅通工程(最小生成树)
- hdu1233 - 还是畅通工程 (求最小生成树)(Kruskal)
- 还是畅通工程 HDU1233(最小生成树)
- hdu1233 还是畅通工程 (kruskal求最小生成树)
- hdu1233——还是畅通工程(最小生成树)
- HDU1233还是畅通工程(最小生成树)
- 最小生成树1.0(hdu1233 还是畅通工程)
- 【HDU1233】还是畅通工程(最小生成树-水题)
- 【HDU1233】还是畅通工程(最小生成树)
- 作业4.21
- Android下拉列表控件spinner-andoid学习之旅(十一)
- Array和ArrayList的区别
- TexLive+moderncv,打造你自己的简历
- 复杂链表的复制
- hdu1233---还是畅通工程 最小生成树(水)
- POJ 3264 Balanced Lineup(RMQ模板)
- P122.32
- MyBatis Generator常用配置说明
- 我该不该有信仰
- 使用compass自动拼css sprite
- 黑马程序员---Objective-C Block
- 数据结构和算法经典100题-17题
- Java-----7、集合