一張\(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)\),最大化\(\frac\ a_i*x_i}\ b_i*x_i}\)這個問題我們用二分答案的思想來解決。
既然是二分答案,我們首先需要選乙個二分的量使答案關於它單調。
如果存在選數方案使\(\frac\ a_i*x_i}\ b_i*x_i}>=mid\),那麼可以增大\(mid\);否則減小。二分停止時\(mid\)即為答案。
變形不等式\(\frac\ a_i*x_i}\ b_i*x_i}>=mid\),它等價於\(\sigma^n_\ (a_i-mid*b_i)*x_i>=0\)。
也就是說我們需要判斷對於當前\(mid\),是否存在選數方案使\(\sigma^n_\ (a_i-mid*b_i)*x_i>=0\)。
判斷是否有方案使\(\sigma^n_\ (a_i-mid*b_i)*x_i>=0\),只需要最大化\(\sigma^n_\ (a_i-mid*b_i)*x_i\),並將其與\(0\)比較。而我們可以直接將所有\(a_i-mid*b_i\)計算出,這\(n\)個數中選若干產生和的最大值即為其中所有正數之和。
時間複雜度為\(o(n\lg n)\)。
這道題與0/1規劃問題唯一增加的限制就是我們選的最後那些數要在一顆樹里。。。
因此在二分中,在原圖結構上將每條邊權修改為\(a_i-b_i*mid\),然後跑最大生成樹,判斷樹上所有邊權和是否非負即可。
這題實現起來比較簡單也沒什麼細節,就不放**了。
如果詢問的是求一顆\(a\)權和與\(b\)權和乘積最小的生成樹呢?
那解法顯然截然不同,成了乙個計算幾何題了[捂臉]
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 最優比率生成樹
題意 乙個無向圖,每條邊有兩個權值,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...