poj 2728 最優比率生成樹

2022-05-22 07:30:11 字數 1015 閱讀 5454

思路:設sum(cost[i])/sum(dis[i])=r;那麼要使r最小,也就是minsum(cost[i]-r*dis[i]);那麼就以cost[i]-r*dis[i]為邊權重新建邊。當求和使得最小生成樹的

sum(cost[i]-r*dis[i])==0時,這個r就是最優的。這個證明是01分數規劃。

#include#include

#include

#include

#include

#define maxn 1010

#define maxm maxn*maxn

#define inf 1e16

#define eps 1e-6

using

namespace

std;

intvi[maxn],n;

double

dis[maxn][maxn],cost[maxn][maxn],benefit[maxn][maxn],far[maxn];

struct

pointp[maxn];

void

init()

double

dis(point a,point b)

double prime(double

r) }

vi[temp]=1

; ans+=max;

//dis[temp][j]-cost[temp][j]

for(j=1;j<=n;j++)

}return

ans;

}int

main()

for(i=1;i)

}double

l,r,mid;

l=0,r=100000

;

double

temp;

while(r-l>eps)

printf(

"%.3lf\n

",l);

}return0;

}

poj2728 最優比率生成樹

這個題的意思是給你乙個連通圖,圖上每個點都有連個權值ai,bi讓你選乙個生成樹使得sigma ai xi sigma bi xi 最小,對比與基礎的01規劃,我們假設答案是mid,然後建立乙個圖,其新的邊的權值是ai mid bi,然後求解最小生成樹,假設其答案是tp,如果tp 0,說明還有更優的解...

POJ2728 最優比率生成樹

一張 n 個結點 m 條邊的無向圖,每條邊有兩個權值 a,b 求一顆生成樹滿足樹上的所有邊 a 權和與 b 權和的商最大。1 n,m 1e4 0 1分數規劃 從長度為 n 的數列 和 中選出若干對,使得選出的 a 之和與 b 之和商最大。即求一組 x i 1 i n,x i 0 or 1 最大化 f...

poj2728 最優比率生成樹

題意 乙個無向圖,每條邊有兩個權值,h和l,要求乙個生成樹,使得所有邊的h的和比上l的和最小。設x i 等於1或0,表示邊e i 是否屬於生成樹.則我們所求的比率 r benifit i x i cost i x i 0 i為了使 r 最小,設計乙個子問題 讓 z benifit i x i k c...