POJ 2728 Desert King(最优比率生成树) prim+二分
2013-07-27 21:38
246 查看
POJ 2728 Desert King(最优比率生成树) prim+二分
北京赛区的经典题目,最优比率生成树,传说中楼哥1A的G题。。。什么是最优比率生成树呢?说白了很简单,已知一个完全图,每条边有两个参数(b和c),求一棵生成树,使(∑xi×ci)/(∑xi×bi)最小,其中xi当第i条边包含在生成树中时为1,否则为0。其实也可以看成一个0,1的整数规划问题。
我的做法是LRJ《算法艺术与信息学竞赛》中介绍的二分,详细的证明请看书,这里只是简单的介绍一下核心的方法:
1.首先找出这个比率的最小值和最大值 front,rear
2.求mid=(front+reat)/2
3.用 ci-mid*bi 重新构图
4.求出新图的最小生成树权值之和
5.如果权值等于0,mid就是我们要求的比率,结束。如果权值>0,front=mid,如果权值<0,rear=mid,跳回2继续循环。
不过这个算法对精度的要求比较高,我用0.001就错了,0.00001超时,只有0.0001AC,汗
另外时间效率也不高,3000MS的题,耗去了2500MS,看来这个算法还是有待改进。
下面是我的代码:
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include<iostream>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include<algorithm>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include<cstring>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include<cmath>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
using namespace std;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#define MAX 1001
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#define INF 1000000000
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
struct node
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
double x,y,h;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}dot[MAX];
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
inline double dis(double x1,double y1,double x2,double y2)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return sqrt( (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1) );
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
double graph[MAX][MAX];
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
inline void creat(int n,double l)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int i,j;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(i=1;i<=n;i++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(j=1;j<=n;j++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
graph[i][j]=fabs(dot[i].h-dot[j].h)-l*dis(dot[i].x,dot[i].y,dot[j].x,dot[j].y);
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
inline double prim(double graph[MAX][MAX],int n)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
bool visit[MAX]={0};
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int mark;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
double dis[MAX];
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
double ans=0;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int i,j;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
visit[1]=true;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(i=1;i<=n;i++)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
dis[i]=graph[1][i];
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(i=1;i<n;i++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int minnum=INF;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(j=1;j<=n;j++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if(!visit[j]&&dis[j]<=minnum)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
minnum=dis[j];
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
mark=j;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
visit[mark]=true;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
ans+=dis[mark];
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(j=1;j<=n;j++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if(!visit[j]&&graph[mark][j]<dis[j])
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
dis[j]=graph[mark][j];
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return ans;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int main()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int i,j;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int n;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
double res;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
while(scanf("%d",&n))
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if(n==0)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
break;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(i=1;i<=n;i++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
scanf("%lf%lf%lf",&dot[i].x,&dot[i].y,&dot[i].h);
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
double front,rear;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
front=0;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
rear=100;//这个地方有点悬。。。
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
double mid;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
double pre=0.0;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
while(front<=rear)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
mid=(front+rear)/2;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
creat(n,mid);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
res=prim(graph,n);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if(fabs(res-pre)<=0.0005)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
break;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
else if(res>0.0005)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
front=mid;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
rear=mid;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printf("%.3lf\n",mid);
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return 0;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
———————————————————————传说中的分割线————————————————————————————
终于在今天下午 使用迭代法将此题优化到282MS,呵呵 这名字让我又想起了数值分析。。。
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include<iostream>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include<algorithm>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include<cstring>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include<cmath>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
using namespace std;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#define MAX 1001
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#define INF 1000000000
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
struct node
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
double x,y,h;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}dot[MAX];
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
inline double dis(double x1,double y1,double x2,double y2)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return sqrt( (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1) );
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
double graph[MAX][MAX];
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
double c[MAX][MAX];
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
double s[MAX][MAX];
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
inline void creatcs(int n)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int i,j;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(i=1;i<=n;i++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(j=1;j<=n;j++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
c[i][j]=fabs(dot[i].h-dot[j].h);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
s[i][j]=dis(dot[i].x,dot[i].y,dot[j].x,dot[j].y);
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
inline void creat(int n,double l)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int i,j;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(i=1;i<=n;i++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(j=1;j<=n;j++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
graph[i][j]=c[i][j]-l*s[i][j];
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
double sumc;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
double sums;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
inline void prim(double graph[MAX][MAX],int n)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
sumc=0;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
sums=0;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
bool visit[MAX]={0};
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int mark;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int pre[MAX];
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
double dis[MAX];
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int i,j;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
visit[1]=true;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(i=1;i<=n;i++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
dis[i]=graph[1][i];
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
pre[i]=1;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(i=1;i<n;i++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int minnum=INF;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(j=1;j<=n;j++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if(!visit[j]&&dis[j]<=minnum)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
minnum=dis[j];
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
mark=j;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
visit[mark]=true;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
sumc+=c[pre[mark]][mark];
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
sums+=s[pre[mark]][mark];
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(j=1;j<=n;j++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if(!visit[j]&&graph[mark][j]<dis[j])
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
dis[j]=graph[mark][j];
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
pre[j]=mark;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int main()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int i,j;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int n;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
while(scanf("%d",&n))
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if(n==0)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
break;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(i=1;i<=n;i++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
scanf("%lf%lf%lf",&dot[i].x,&dot[i].y,&dot[i].h);
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
creatcs(n);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
double prerate=30.0;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
double rate=30.0;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
while(true)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
creat(n,rate);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
prim(graph,n);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
rate=sumc/sums;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if(fabs(rate-prerate)<0.001)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
break;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
prerate=rate;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printf("%.3lf\n",rate);
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return 0;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
posted on 2009-09-04 23:53 abilitytao 阅读(2116) 评论(4) 编辑 收藏 引用
最优比例生成树
My mathematics homework here :)![](http://hiphotos.baidu.com/zzningxp/pic/item/263bf8dd1d0649fa76c63858.jpg)
![](http://hiphotos.baidu.com/zzningxp/pic/item/50d0a98f884c4dfbf01f3658.jpg)
![](http://hiphotos.baidu.com/zzningxp/pic/item/fdd190b1db0b904109230258.jpg)
![](http://hiphotos.baidu.com/zzningxp/pic/item/8231a50e8bf48df236d12259.jpg)
![](http://hiphotos.baidu.com/zzningxp/pic/item/95df322e4d2042454fc22659.jpg)
![](http://hiphotos.baidu.com/zzningxp/pic/item/8efbfdfe933c65245c600859.jpg)
![](http://hiphotos.baidu.com/zzningxp/pic/item/c0297fd0691a489aa0ec9c5a.jpg)
![](http://hiphotos.baidu.com/zzningxp/pic/item/02859ad6a066473a07088b5a.jpg)
tags:
最优比例 生成树 最小生成树 支撑树 best radio spanning tree (BRST)
算法艺术与信息学竞赛 刘汝佳 lrj acm
二分枚举答案 参数搜索 01分数规划问题转换 二分法 单调
相关文章推荐
- poj_2728 Desert King(最优比率生成树+01分数规划+二分+prim)
- poj2728 Desert King(最优比率生成树【Prim)
- POJ 2728 Desert King 最优比率生成树
- POJ 2728 Desert King 最优比率生成树
- 【POJ】【2728】 Desert King 最优比率生成树
- poj 2728 Desert King(最优比率生成树)
- POJ 2728 Desert King(最优比率生成树)
- poj 2728 Desert King 【最优比例生成树 0-1分数规划】 【二分 or 迭代 + MST】
- POJ 2728-Desert King(01分数规划_最优比率生成树)
- POJ 2728 Desert King(最优比率生成树)
- poj2728--Desert King(最优比率生成树)
- POJ 2728 Desert King 01分数规划 最优比率生成树
- poj 2728 Desert King(最优比率生成树,01分数规划)
- POJ 2728 Desert King(01分数规划+二分+最小生成树-Prim)
- poj 2728(最优比率生成树 二分)
- POJ2728 Desert King 最优比率生成树
- POJ 2728 Desert King(初遇最优比率生成树)
- POJ 2728 Desert King (最优比率生成树)
- POJ 2728 Desert King (最优比率生成树---01分数规划)
- Desert King POJ - 2728 (最优比率生成树) 二分