bzoj 4753 Jsoi2016 最佳團體

2021-08-20 16:27:20 字數 1568 閱讀 2879

description

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

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

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

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

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

input

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

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

對於100%的資料滿足1≤k≤n≤2500,0< 」 si,pi」≤10^4,0≤ri< i

output

輸出一行乙個實數,表示最佳比值。答案保留三位小數。

sample input

1 21000 1 0

1 1000 1

sample output

0.001

hint

2017.9.12新加資料一組 by gxzlegend

source

分數規劃+dfs序 揹包 常數大 差點被卡t

二分答案 然後結果就是sigma p[x]-s[x]*mid

設dp[i][j]表示i子樹選了j個點的最大代價

具體可上網搜尋 依賴型揹包

只要看選k個能否》0即可

#include

#include

#include

#include

#include

#define eps 1e-9

using

namespace

std;

inline

char gc()

return *s++;

}inline

int read()

while(isdigit(ch)) x=x*10+ch-'0',ch=gc();

return x*f;

}const

int n=2550;

struct nodedata[n<<1];

double dp[n][n],mid;int num,h[n],k,n,s[n],p[n];

inline

void insert1(int x,int y)

inline

void dfs(int x,int fa)

for (int i=1;i<=k;++i) dp[fa][i]=max(dp[fa][i],dp[x][i]);

}inline

bool check(double md)

int main()

double l=0,r=2e7;

while(fabs(r-l)>eps)printf("%.3f\n",r);

return

0;}

bzoj4753 Jsoi2016 最佳團體

在萌神的指點下學會了這道題。先01分數規劃,二分答案,s p a ns 即 s p an s 0 那就重新計算點權wi si mid pi,轉成判定性問題 能否選擇一些點,使得總點權不小於0?傳統的泛化揹包或者多叉轉二叉是o n3 的。ac cord ingt oftm 2001 萌神 dfs之後,...

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 需要保證...