題目大意:
有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#includeview code#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;
}
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...