BZOJ4753 最佳團體(分數規劃,動態規劃)

2022-03-20 05:54:12 字數 1202 閱讀 2472

bzoj

jsoi資訊學代表隊一共有n名候選人,這些候選人從1到n編號。方便起見,jyy的編號是0號。每個候選人都由一位

編號比他小的候選人ri推薦。如果ri=0則說明這個候選人是jyy自己看上的。為了保證團隊的和諧,jyy需要保證,

如果招募了候選人i,那麼候選人ri"也一定需要在團隊中。當然了,jyy自己總是在團隊裡的。每乙個候選人都有

乙個戰鬥值pi",也有乙個招募費用si"。jyy希望招募k個候選人(jyy自己不算),組成乙個價效比最高的團隊。

也就是,這k個被jyy選擇的候選人的總戰鬥值與總招募總費用的比值最大。

輸入一行包含兩個正整數k和n。

接下來n行,其中第i行包含3個整數si,pi,ri表示候選人i的招募費用,戰鬥值和推薦人編號。

對於100%的資料滿足1≤k≤n≤2500,0<"si,pi"≤10^4,0≤ri輸出一行乙個實數,表示最佳比值。答案保留三位小數。

1 21000 1 0

1 1000 1

0.001

典型的分數規劃

二分答案後將點權轉換為\(p-mid·s\)

然後做乙個樹上揹包就行了

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

#define rg register

#define max 3000

inline int read()

int n,k,p[max],s[max],fa[max];

struct linee[max];

int h[max],cnt=1,size[max];

inline void add(int u,int v);h[u]=cnt++;}

double v[max],f[max][max],tmp[max];

void merge(int x,int y)

void dfs(int u)

bool check(double mid)

int main()

double l=0,r=1e6;

while(r-l>1e-4)

printf("%.3lf\n",l);

return 0;

}

bzoj4753 最佳團體

jsoi 資訊學代表隊一共有 nn 名候選人,這些候選人從 11 到 nn 編號。方便起見,jyy 的編號是 00 號。每個候選人都由一位編號比他小的候選人r iri 推薦。如果 r i 0ri 0 則說明這個候選人是 jyy 自己看上的。為了保證團隊的和諧,jyy 需要保證,如果招募了候選人 ii...

bzoj 4753 最佳團體

written with stackedit.jsoi 資訊學代表隊一共有n名候選人,這些候選人從 1 到 n 編號。方便起見,jyy 的編號是 0 號。每個候選人都由一位編號比他小的候選人 r i 推薦。如果 r i 0 則說明這個候選人是 jyy 自己看上的。為了保證團隊的和諧,jyy 需要保證...

bzoj4753 最佳團體

jsoi 資訊學代表隊一共有 nn 名候選人,這些候選人從 11 到 nn 編號。方便起見,jyy 的編號是 00 號。每個候選人都由一位編號比他小的候選人r iri 推薦。如果 r i 0ri 0 則說明這個候選人是 jyy 自己看上的。為了保證團隊的和諧,jyy 需要保證,如果招募了候選人 ii...