poj2728 (01参数规划,最优化率生成树,二分)
2012-07-06 15:48
190 查看
这题01参数规划,其实就是二分,最优率生成树,但是精度卡的太死了,,要么WA,要么TLE。
二分 重新构图 : graph[i][j]=fabs(dot[i].h-dot[j].h)-mid*dis(dot[i].x,dot[i].y,dot[j].x,dot[j].y);
#include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include <cstdio> using namespace std; #define MAX 1001 #define INF 1000000000 struct node { double x,y,h; }dot[MAX]; inline double dis(double x1,double y1,double x2,double y2) { return sqrt( (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1) ); } double graph[MAX][MAX]; inline void creat(int n,double l) { int i,j; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { graph[i][j]=fabs(dot[i].h-dot[j].h)-l*dis(dot[i].x,dot[i].y,dot[j].x,dot[j].y); } } } inline double prim(double graph[MAX][MAX],int n) { bool visit[MAX]={0}; int mark; double dis[MAX]; double ans=0; int i,j; visit[1]=true; for(i=1;i<=n;i++) dis[i]=graph[1][i]; for(i=1;i<n;i++) { int minnum=INF; for(j=1;j<=n;j++) { if(!visit[j]&&dis[j]<=minnum) { minnum=dis[j]; mark=j; } } visit[mark]=true; ans+=dis[mark]; for(j=1;j<=n;j++) { if(!visit[j]&&graph[mark][j]<dis[j]) dis[j]=graph[mark][j]; } } return ans; } int main() { int i,j; int n; double res; while(scanf("%d",&n)) { if(n==0) break; for(i=1;i<=n;i++) { scanf("%lf%lf%lf",&dot[i].x,&dot[i].y,&dot[i].h); } double front,rear; front=0; rear=100;//这个地方有点悬。。。 double mid; double pre=0.0; while(front<=rear) { mid=(front+rear)/2; creat(n,mid); res=prim(graph,n); if(fabs(res-pre)<=0.0005) break; else if(res>0.0005) front=mid; else rear=mid; } printf("%.3lf\n",mid); } return 0; }
相关文章推荐
- POJ.2728.Desert King(最优比率生成树 Prim 01分数规划 二分/Dinkelbach迭代)
- poj2728-最小比率生成树/0-1分数规划/二分/迭代
- poj2728 Desert King --- 01分数规划 二分水果。。
- POJ-2728 Desert King 01参数规划-最优比率生成树
- POJ 2728 Desert King(01分数规划+二分+最小生成树-Prim)
- poj2728 最小比率生成树——01分数规划
- 01分数规划poj2728(最优比例生成树)
- POJ2728 最小比率生成树/0-1分数规划/二分/迭代(迭代不会)
- poj2728 Desert King --- 01分数规划 二分水果。。
- poj2728 Desert King 【最优比例生成树 01分数规划】
- 最小比例生成树(01分数规划)二分或迭代
- 最小比例生成树(01分数规划)二分或迭代
- POJ-2728 Desert King 最优比例生成树 01分数规划/参数搜索
- poj 2728 最优比例生成树(01分数规划)模板
- poj 2728 最优比例生成树(01分数规划)模板
- POJ 2728 Desert King ★(01分数规划介绍 && 应用の最优比率生成树)
- POJ2728 Desert King ——01分数规划Dinkelbach迭代法+最小生成树prim算法
- poj 3621 Sightseeing Cows (最优比率生成环 01分数规划问题 )
- poj 2728 最优比例生成树(01分数规划)模板
- zoj 2676 二分+ISAP模板求实型参数的最小割(0-1分数规划问题)(可做ISAP模板)