最优比例生成树

最优比例生成树
http://hi.baidu.com/zzningxp/blog/item/b2d1b4ec1f8bbc2262d09fc9.html

http://acm.pku.edu.cn/JudgeOnline/problem?id=2728 可以试试这道题。。。
思路AC后更新
已经ac,很慢。。。。巨慢!
部分代码如下:
double  prim( int  n, double  rat)
{
    
int i,j,sign;
    
int flag[1000];
    
double dis[1000],sum;
    memset(flag,
0,sizeof(flag));
    
for(i=0;i<n;i++)
        
for(j=i;j<n;j++)
        
{
            
double t=DIS(i,j)-map[i][j]*rat;
            cost[i][j]
=t;
            cost[j][i]
=t;
        }

    
for(i=0;i<n;i++)
        dis[i]
=cost[0][i];
    flag[
0]=1;
    sum
=0;
    
for(j=1;j<n;j++)
    
{
        
double min=100000000;
        
for(i=0;i<n;i++)
            
if(!flag[i]&&min>dis[i])
            
{
                sign
=i;
                min
=dis[i];    
            }

        flag[sign]
=1;
        sum
+=dis[sign];
        
for(i=0;i<n;i++)
            
if(!flag[i]&&dis[i]>cost[sign][i])
                dis[i]
=cost[sign][i];    
    }

    
return sum;    
}
二分思想代码如下:
while(1)
        {
            mid=(low+high)/2;
            double t=prim(n,mid);
            if(fabs(t)
< 1e-6 )break;
            if(t<0)high
=mid;
            
else low =mid;
        
}

你可能感兴趣的:(最优比例生成树)