zoj 1914 Arctic Network
2011-08-19 10:15
197 查看
找最小生成树的倒数第几长边的问题
1,读入数据的处理,最终处理为结构体形式
2,快排................................
3,并查集找结点,并记录边长大小
4,输出所求数据
1,读入数据的处理,最终处理为结构体形式
2,快排................................
3,并查集找结点,并记录边长大小
4,输出所求数据
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> typedef struct Tedge { int from,to; int dist; }edge; edge dis[500*500]; //记录from点到to点的距离 int ans[500+10]; //记录距离 int coor[510][5]; //记录各个点的坐标 int fa[500+10]; //定义father域 int D(int x) //计算一个数的平方 { return(x*x); } int P(int i,int j) //计算两个点之间的距离的平方 { return( D(coor[i][0]-coor[j][0])+D(coor[i][1]-coor[j][1]) ); } int cmp(const void *a,const void *b) { return (*(edge *)a).dist - (*(edge *)b).dist; } int find(int i) { if(fa[i] == i)return i; fa[i]=find(fa[i]); return fa[i]; } int main() { int N,s,p,i,j; int n = 0; //记录各个点之间的距离数 scanf("%d",&N); while(N--) { scanf("%d%d",&s,&p); for(i=1;i<=p;i++) scanf("%d%d",&coor[i][0],&coor[i][1]); //读入了各点坐标 n = 0; for(i=1;i<=(p-1);i++) { for(j=i+1;j<=p;j++) { dis .from = i; dis .to = j; dis .dist = P(i,j); n++; } } //求出了各点之间的距离 qsort(dis,n,sizeof(edge),cmp); //对dis结构体数组排序 for(i=1;i<=p;i++)fa[i]=i; int total = 0; for(i=0;i<n;i++) { if(find(dis[i].from) != find(dis[i].to)) { fa[ fa[dis[i].from] ] = fa[dis[i].to]; total++; ans[total] = dis[i].dist; if(total == (p-s))break; } } printf("%.2lf\n",sqrt(ans[total])); } return 0; }
相关文章推荐
- ZOJ 1914 Arctic Network (POJ 2349 UVA 10369) MST
- ZOJ 1914 Arctic Network (POJ 2349) MST
- ZOJ 1914 Arctic Network 最小生成树
- zoj 1914 Arctic Network(最小生成树))
- POJ2349,ZOJ1914,Arctic Network
- ZOJ 1914 Arctic Network (kruskal + prim )
- ZOJ 1914 Arctic Network【kruskal】
- zoj 1914 || poj 2349 Arctic Network【最小生成树 kruskal && prim】
- zoj 1914 && poj 2349 Arctic Network
- zoj 1914 poj 2349 Arctic Network
- zoj 1914 Arctic Network
- ZOJ 1914 Arctic Network (POJ 2349 UVA 10369) MST
- ZOJ 1914 Arctic Network(解题报告)
- zoj 1914 || poj 2349 Arctic Network(Prim~)
- ZOJ 1914 Prim Kruskal
- POJ 2349&&ZOJ 1914 Arctic Network(kuangbin带你飞 专题六:最小生成树)
- ZOJ 1914最小生成树
- zoj1716 Get Many Persimmon Trees
- ZOJ Problem Set - 1392 The Hardest Problem Ever
- zoj 3813 Alternating Sum