[POJ2728]Desert King(01分数规划树+prim)
2018-03-29 14:34
176 查看
题目:
我是超链接题意:
n个村庄,要建立n-1条管道,管道只能连接两个村庄,管道的长度是村庄的欧拉距离,花费是高度差。询问总花费比总长度的最小值题解:
设∑costi∑leni=L∑costi∑leni=L,那么要找一个值更小的L,∑costi−∑leni∗L<0∑costi−∑leni∗L<0,也就是说如果能找到一个和小于0的,那么就可以往更小的地方找。这道题目因为是在树上,所以要维护一棵最小生成树,Kruscal会T,因为是完全图,那么我们用prim
代码:
#include <cmath> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const double eps=1e-5; const int N=1005; const int M=1000005; struct hh{double x,y,h;}cz ; double d ,dis ,cost ,minn ;int f ,num,n;bool vis ; bool check(double mid) { memset(minn,0x7f,sizeof(minn)); minn[1]=0; for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) d[i][j]=cost[i][j]-mid*dis[i][j]; memset(vis,0,sizeof(vis)); for (int i=1;i<=n;i++) { int k=0; for (int j=1;j<=n;j++) if (!vis[j] && minn[j]<minn[k]) k=j; vis[k]=1; for (int j=1;j<=n;j++) if (!vis[j] && d[k][j]<minn[j]) minn[j]=d[k][j]; } double sum=0; for (int i=1;i<=n;i++) sum+=minn[i]; return sum<0; } int main() { while (scanf("%d",&n) && n) { for (int i=1;i<=n;i++) scanf("%lf%lf%lf",&cz[i].x,&cz[i].y,&cz[i].h); num=0; for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) dis[i][j]=sqrt((cz[i].x-cz[j].x)*(cz[i].x-cz[j].x)+(cz[i].y-cz[j].y)*(cz[i].y-cz[j].y)), cost[i][j]=fabs(cz[i].h-cz[j].h); double l=0,r=10000000; while (r-l>=eps) { double mid=(l+r)/2; if (check(mid)) r=mid; else l=mid; } printf("%.3lf\n",l); } }
相关文章推荐
- [POJ2728]Desert King(01分数规划)
- poj2728 Desert King 【最优比例生成树 01分数规划】
- poj2728 Desert King --- 01分数规划 二分水果。。
- POJ2728 Desert King ——01分数规划Dinkelbach迭代法+最小生成树prim算法
- poj2728 Desert King --- 01分数规划 二分水果。。
- POJ 2728 Desert King(01分数规划+二分+最小生成树-Prim)
- poj-2728-Desert King-01分数规划+最小生成树
- POJ-2728 Desert King 最优比例生成树 01分数规划/参数搜索
- POJ 2728 Desert King (最优比率生成树---01分数规划)
- Poj 2728 Desert King【最优比例生成树/01分数规划】
- 【POJ 2728】[01分数规划]Desert King
- POJ 2728 Desert King | 01分数规划
- poj 2728 Desert King(01分数规划--最优比率生成树)
- POJ 2728 Desert King (最优比率生成树 01分数规划问题)
- poj_2728 Desert King(最优比率生成树+01分数规划+二分+prim)
- poj 2728 Desert King 01分数规划
- poj 2728 Desert King(最优比率生成树,01分数规划)
- 【POJ】2728 Desert King 最优比率生成树——01分数规划【经典】
- POJ 2728 Desert King 01分数规划 最优比率生成树
- POJ 2728 Desert King ★(01分数规划介绍 && 应用の最优比率生成树)