POJ 2728 最優比例生成樹

2021-12-29 22:31:32 字數 2087 閱讀 9858

有帶權圖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]), 0≤i

為了使 r 最大, 設計乙個子問題---> 讓 z = ∑(benifit[i] * x[i]) - l * ∑(cost[i] * x[i]) = ∑(d[i] * x[i]) 最大 (d[i] = benifit[i] - l * cost[i]) , 並記為z(l).

然後明確兩個性質:

1. z單調遞減

證明: 因為cost為正數, 所以z隨l的減小而增大.

2. z( max(r) ) = 0

證明: 若z( max(r) ) < 0, ∑(benifit[i] * x[i]) - max(r) * ∑(cost[i] * x[i]) < 0, 可化為 max(r) < max(r). 矛盾;

若z( max(r) ) >= 0, 根據性質1, 當z = 0 時r最大.

/*id: [email protected]

prog:

lang: c++

*/#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define maxn 1010

#define inf (1<<30)

#define pi acos(-1.0)

#define mem(a, b) memset(a, b, sizeof(a))

#define for(i, n) for (int i = 0; i < n; i++)

#define eps (1e-5)

typedef long long ll;

//二分法 複雜度較高

using namespace std;

int n, vis[maxn], pre[maxn];

struct node p[maxn];

double edge[maxn][maxn];

void init()

for (int i = 1; i <= n; i++)

}double dis[maxn];

double prim(double l)

vis[1] = 1;

double cost = 0;

for (int i = 1; i < n; i++)

if (k != -1) }}

}return cost;

}void binary()

printf("%.3f\n", mid);

}int main ()

return 0;

}//迭代法

using namespace std;

int n, vis[maxn], pre[maxn];

struct node p[maxn];

double edge[maxn][maxn];

void init()

for (int i = 1; i <= n; i++)

}double dis[maxn];

double prim(double l)

vis[1] = 1;

double cost = 0, len = 0;

for (int i = 1; i < n; i++)

if (k != -1) }}

}return cost / len;

}void iter()

printf("%.3f\n", b);

}int main ()

return 0;

}

POJ 2728 最小比例生成樹

傳送門 有n個村莊,每個村莊都有乙個 x,y 座標和z海拔,定義兩個村莊間的dist為座標的距離,cost為海拔差的絕對值,求圖的一顆生成樹,使得 frac 最小。最小比例生成樹的裸題。看到 frac 的分數形式,首先可以想到分數規劃 設 ans frac 則 sum cost ans sum di...

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