10369 - Arctic Network
来源:互联网 发布:iphone桌面软件管理 编辑:程序博客网 时间:2024/06/09 16:31
这题的意思是给出p个点,然后p的点可以由无线电通信或者是卫星通信,然后只有m的点能通过卫星通信,然后用无线电通信的点的距离不能超过D超过D的话惠氏通信的成本增加,问在使通信成本就低的情况下求D
这题还是最小生成树,用prim算法构造MST,在构造的过程将每次算的最小的权值存到数组f里面,然后按照升序排序。因为卫星通信可以无限远,就是说后m的权值可以不用算,所以答案就是f[p-m].
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>using namespace std;const double inf=2500000;double G[555][555]; int x[555],y[555];double low[555]; int vis[555];double f[555];int m,p;double get_dis(int a,int b,int c,int d){ return sqrt(pow(a-c,2.0)+pow(b-d,2.0));}void prim(){ memset(vis,0,sizeof(vis)); int pos=1; double min; vis[1]=1; for(int i=1;i<=p;i++) low[i]=G[pos][i]; for(int i=1;i<p;i++) { min=inf; for(int j=1;j<=p;j++) { if(!vis[j]&&low[j]<min) { min=low[j]; pos=j; } } vis[pos]=1; f[i]=min; for(int j=1;j<=p;j++) { if(!vis[j]&&low[j]>G[pos][j]) low[j]=G[pos][j]; } } sort(f+1,f+p); printf("%0.2lf\n",f[p-m]);}int main(){ int t; scanf("%d",&t); while(t--) { scanf("%d %d",&m,&p); for(int i=1;i<=p;i++) scanf("%d %d",&x[i],&y[i]); int k=0; for(int i=1;i<=p;i++) { for(int j=i+1;j<=p;j++) G[i][j]=G[j][i]=get_dis(x[i],y[i],x[j],y[j]); } prim(); } return 0;}
0 0
- UVA 10369 Arctic Network
- UVaOJ 10369 - Arctic Network
- UVA 10369 - Arctic Network
- UVa 10369 - Arctic Network
- UVa 10369 - Arctic Network
- Uva 10369 - Arctic Network
- UVa 10369 - Arctic Network
- UVa:10369 Arctic Network
- UVA 10369 - Arctic Network
- 10369 - Arctic Network
- Uva 10369 - Arctic Network//kruskal
- Arctic Network
- Arctic Network
- Arctic Network
- Arctic Network
- Arctic Network
- Arctic Network
- Arctic Network
- 二叉排序树的建立
- zoj(1221
- Uva(10305)
- Uva(10034)
- HDU(1087)继续畅通工程
- 10369 - Arctic Network
- prim算法
- C-Lodop工作原理
- 10099 The Tourist Guide
- hdu2066(迪杰斯特拉算法模板)
- Uva(10986)
- 嵌入式系统
- Uva 558Wormholes
- sencha touch下拉刷新上拉加载实现