博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(step6.1.5)hdu 1233(还是畅通工程——最小生成树)
阅读量:5777 次
发布时间:2019-06-18

本文共 1073 字,大约阅读时间需要 3 分钟。

题目大意:输入一个整数n,表示有n个村庄,在接下来的n*(n-1)/2中,每行有3个整数beigin、end、weight,分别表示路的起始村庄,结束村庄和村庄之间的距离。

求索要修的路的最短距离

解题思路:最小生成树(克鲁斯卡尔算法实现)。。。

PS:更详细的说明在上一篇博客中有

代码如下:

 

/* * 1233_1.cpp * *  Created on: 2013年8月26日 *      Author: Administrator */#include 
using namespace std;struct edge{ int begin; int end; int weight;};const int maxn = 6000;int father[maxn];edge e[maxn*maxn];int find(int x){ if( x == father[x]){ return x; } father[x] = find(father[x]); return father[x];}int kruscal(int count){ int i; int sum = 0; for( i = 1 ; i < maxn ; ++i){ father[i] = i; } for( i = 0 ; i < count ; ++i ){ int fx = find(e[i].begin); int fy = find(e[i].end); if(fx != fy){ father[fx] = fy; sum += e[i].weight; } } return sum;}bool compare(const edge& a , const edge& b){ return a.weight < b.weight;}int main(){ int n; while(scanf("%d",&n)!=EOF,n){ int i; int m = n*(n - 1)/2; memset(father,0,sizeof(father));//尽量加上,否则可能会出现一些问题 for(i = 0; i < m ; ++i){ scanf("%d%d%d",&e[i].begin,&e[i].end,&e[i].weight); } sort(e, e + m , compare); int sum = kruscal(m); printf("%d\n",sum); }}

 

 

转载地址:http://ifuyx.baihongyu.com/

你可能感兴趣的文章
PC-IIS因为端口问题报错的解决方法
查看>>
java四种线程池简介,使用
查看>>
一般处理程序(.ashx)中session的使用方法
查看>>
EasyUI笔记(二)Layout布局
查看>>
ios View之间的切换 屏幕旋转
查看>>
typedef BOOL(WINAPI *MYFUNC) (HWND,COLORREF,BYTE,DWORD);语句的理解
查看>>
jsp 特殊标签
查看>>
[BZOJ] 1012 [JSOI2008]最大数maxnumber
查看>>
gauss消元
查看>>
多线程-ReentrantLock
查看>>
数据结构之链表与哈希表
查看>>
IIS7/8下提示 HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求...
查看>>
http返回状态码含义
查看>>
响应式网站对百度友好关键
查看>>
洛谷P2179 骑行川藏
查看>>
(十八)js控制台方法
查看>>
VB关键字总结
查看>>
虚拟机类加载机制
查看>>
android代码生成jar包并混淆
查看>>
Java基础2-基本语法
查看>>