poj2728 最小比率生成樹 01分數規劃

2022-04-30 07:39:14 字數 1161 閱讀 3443

題目大意:

有n個村莊,村莊在不同座標和海拔,現在要對所有村莊供水,

只要兩個村莊之間有一條路即可,建造水管距離為座標之間的歐幾里德距離,費用為海拔之差,

現在要求方案使得費用與距離的比值最小,很顯然,這個題目是要求一棵最優比率生成樹。

————————————————————————————————————

這是一道最優比率生成樹的題目,是個很明顯的0-1分數規劃,設每條邊代價為ci,距離為di

那麼題目要求(∑(ci*xi))/(∑(di*xi))的最小值xi∈

我們進行一波轉換 

z=(∑(ci*xi))-r'*(∑(di*xi)),其中z是左邊這個式子的最小值

由於di為正數,xi為非負數,所以

r'>r 時 z(r')<0

r'=r 時 z(r')=0

r'0

那麼二分這個最小值,將這個式子化成xi(ci-r'*di)的形式,每條邊的權值變成ci-r'*di

對於這些邊,求一棵最小生成樹,mst的值即為z(r')

這樣問題就解決了qaq(注:! 這裡輸出要%.3f 不能lf !!! 我錯了五次就在這裡

#include#include

#include

#include

using

namespace

std;

const

int m=1e4+7

;const

double inf=1e15;

intn;

intv[m][m];

intx[m],y[m],w[m],vis[m];

double

d[m],map[m][m];

double calc(int s1,int s2)

double prim(double

k)

return

sum;

}int

main()

printf(

"%.3f\n

",r);

}return0;

}

view code

poj2728 最優比率生成樹

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

poj 2728 最優比率生成樹

思路 設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 ...

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...