bzoj 4753 最佳團體

2022-04-08 00:40:49 字數 1396 閱讀 1206

written with stackedit.

\(jsoi\)資訊學代表隊一共有n名候選人,這些候選人從\(1\)到\(n\)編號。方便起見,\(jyy\)的編號是\(0\)號。每個候選人都由一位編號比他小的候選人\(r_i\)推薦。如果\(r_i=0\)則說明這個候選人是\(jyy\)自己看上的。為了保證團隊的和諧,\(jyy\)需要保證,如果招募了候選人\(i\),那麼候選人\(r_i\)"也一定需要在團隊中。當然了,\(jyy\)自己總是在團隊裡的。每乙個候選人都有乙個戰鬥值p\(_i\)",也有乙個招募費用\(s_i\)"。\(jyy\)希望招募\(k\)個候選人(\(jyy\)自己不算),組成乙個價效比最高的團隊。也就是,這\(k\)個被\(jyy\)選擇的候選人的總戰鬥值與總招募總費用的比值最大。

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

接下來\(n\)行,其中第\(i\)行包含\(3\)個整數\(s_i,p_i,r_i\)表示候選人i的招募費用,戰鬥值和推薦人編號。

對於\(100\%\)的資料滿足\(1≤k≤n≤2500,0

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

1 21000 1 0

1 1000 1

0.001

#include#define inf 1e9

using namespace std;

typedef long long lovelive;

const double eps=1e-5;

inline int read()

while (jp>='0'&&jp<='9')

return out*fh;

}const int maxn=2510;

int a[maxn],b[maxn],fa[maxn];//p,s,r

int cnt=0,head[maxn],to[maxn<<1],nx[maxn<<1];

double w[maxn],f[maxn][maxn];

int sons[maxn],siz[maxn];

inline void add(int u,int v)

int n,k;

void dfs(int u)

for(int i=head[u];i;i=nx[i])

}siz[u]+=siz[v];

} for(int i=k;i>=0;--i) }

int check(double x)

int main()

double l=0,r=1e4,ans=0;

while(r-l>eps)

else

r=mid;

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

return 0;

}

bzoj4753 最佳團體

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

bzoj4753 最佳團體

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

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

bzoj jsoi資訊學代表隊一共有n名候選人,這些候選人從1到n編號。方便起見,jyy的編號是0號。每個候選人都由一位 編號比他小的候選人ri推薦。如果ri 0則說明這個候選人是jyy自己看上的。為了保證團隊的和諧,jyy需要保證,如果招募了候選人i,那麼候選人ri 也一定需要在團隊中。當然了,j...