poj2728 二分優化

2022-05-27 02:45:10 字數 1607 閱讀 5777

題目大意:

給你一堆三維的點,每個點之間的距離是xy軸的歐式距離,代價是高度,問一顆最優比例生成樹。這題是我很早之前做過的了,當初還非常非常菜,給大家看一下我的情況。

當初可真是年少無知啊,這個prim因為是稠密圖,所以n方才能求生成樹,很神奇啊,稠密圖的最小生成樹演算法居然是o(e)的,不過還是很慢就是了。

後來這個題還有一次二分優化,就是說你二分得到的知識不僅僅是只有能或者不能,而是還存在著其他的資訊。

你二分了一次之後還能得到一些有用的,就是你能拿到下一次可能的答案。

你從下一次的答案還能繼續遞推,這樣可以更快速的跳過去。

具體的可以去學學01規劃,這個trick感覺還可以。

ac**(快的那個):

#include #include 

#include

#include

#include

#include

#include

#define clr(a) memset(a,0,sizeof a)

using

namespace

std;

typedef pair

p;const

int maxn=1000+10

;const

int inf=0x3f3f3f3f

;double

mm[maxn][maxn];

intn,heigh[maxn];

p m_t[maxn];

struct

node

;double dis(double a,double b,double c,double

d)bool

used[maxn];

double j(double

c) lowcast[

0].wei=0

; lowcast[

0].dis=0

; lowcast[

0].cos=0

;

double dis_sum=0,cost_sum=0

;

while(1

)

}if(k==-1

)

break

; used[k]=1

; cost_sum+=lowcast[k].cos;

dis_sum+=lowcast[k].dis;

for(int i=0;i)

if(!used[i]&&lowcast[i].wei>abs(heigh[k]-heigh[i])-c*mm[k][i])

}return cost_sum/dis_sum;

}int

main()

double rate=0

,t_rate;

while(1

)

rate=t_rate;

}printf(

"%.3lf\n

",rate);}}

poj 2728(最優比率生成樹 二分)

題目大意是 給你座標上一些點,然後你需要用一些邊把他們連線起來,邊有費用和長度,求總費用和總長度最小比值。二分答案 每邊有兩權值 a,b 求 a b最小的生成樹.設 a b k a k b a1 a2 an k b1 b2 bn ai k bi 0 即邊權變為a k b後求mst,看是否 0,如果 ...

POJ 2728 最優比例生成樹

有帶權圖g,對於圖中每條邊e i 都有benifit i 收入 和cost i 花費 我們要求的是一棵生成樹t,它使得 benifit i cost i i t 最大 或最小 設x i 等於1或0,表示邊e i 是否屬於生成樹.則我們所求的比率 r benifit i x i cost i x i ...

poj2728 最優比率生成樹

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