poj2485 Highways
2013-11-29 20:11
239 查看
链接:http://poj.org/problem?id=2485
题意:求建造的连通所有村庄的总长度最短的高速公路中,最长的一个分支。
浅谈:水题。练了一下kruskal算法。
题意:求建造的连通所有村庄的总长度最短的高速公路中,最长的一个分支。
浅谈:水题。练了一下kruskal算法。
#include<stdio.h> #include<stdlib.h> #define nMAX 505*505 struct highway { int v1,v2; int dis; }high[nMAX]; int way; int cmp(const void *p1,const void *p2) { return (*(highway *)p1).dis>(*(highway *)p2).dis?1:-1; } int seek(int set[],int v) { int i=v; while(set[i]>0) i=set[i]; return i; } int kruskal(int way,int n) { int set[nMAX],v1,v2,i,j; int longest=0; for(i=1;i<n+1;i++) set[i]=0; i=1; j=1; while(j<=way-1&&i<=n-1) { v1=seek(set,high[j].v1); v2=seek(set,high[j].v2); if(v1!=v2) { set[v1]=v2; if(longest<high[j].dis) longest=high[j].dis; i++; } j++; } return longest; } int main() { int t,n,distance,mindis,i,j; scanf("%d",&t); while(t--) { way=1; scanf("%d",&n); for(i=1;i<=n;i++) for(j=1;j<=n;j++) { scanf("%d",&distance); if(i!=j) { high[way].v1=i; high[way].v2=j; high[way].dis=distance; way++; } } qsort(high,way,sizeof(high[0]),cmp); mindis=kruskal(way,n); printf("%d\n",mindis); } return 0; }
相关文章推荐
- linux can 总线socket接口测试使用 2012-02-14 14:12:59
- Fencing the Cows
- HDU-1007 Quoit Design 最小距离点对
- <转>MFC 消息机制
- 基于MCP2515的Linux CAN总线驱动程序设计(一)
- 在SQL Server中使用检查约束来验证数据
- 2013-C++第14周项目参考解答链接集
- C++第14周项目7——体验文件操作
- SG函数题目
- oracle的管理工具
- activemq 用jmx监控activemq的配置步骤
- ios开发(八):property
- 机房收费系统之上下机
- C++第14周项目5——字符串统计
- C++第14周项目4——数组的排序
- C++第14周项目3——成绩处理函数版
- STM32的管脚映射
- 【拓扑排序】BFS 别犯傻
- .NET程序运行时,如果不用管理员权限,提示错误
- vi 编辑代码技巧