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