【JSOI2016】最佳团体
- 思路:二分答案+动态规划(结合dfs序)
- 类型:选/不选:最大比值
- 代码:
#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
const int N=2505;
int rt=0,k,n,f[N];
double eps=1e-6,v[N],s[N],p[N],dp[N][N],sum;
int tot,head[N],nxt[N*2],to[N*2],size[N],Time,od[N];
void add_edge(int u,int v) {
	tot++; nxt[tot]=head[u]; to[tot]=v; head[u]=tot;
}
void dfs(int u) {
	size[u]=1;
	od[Time++]=u;		//某时间戳对应的点u子树[od[time],od[time+size[u]]]
	for(int i=head[u];i;i=nxt[i]) {
		int v=to[i];
		dfs(v);
		size[u]+=size[v];
	}
}
bool check(double ans) {
	for(int i=1;i<=n;i++) v[i]=p[i]-s[i]*ans;
	for(int i=1;i<=n+1;i++) for(int j=0;j<=k;j++) dp[i][j]=-sum;
	dp[1][0]=0.0;
	for(int i=1;i<=n;i++) {		//time
		for(int j=0;j<=min(i,k);j++) {
			dp[i+1][j+1]=max(dp[i+1][j+1],dp[i][j]+v[od[i]]);	//选这个点
			dp[i+size[od[i]]][j]=max(dp[i+size[od[i]]][j],dp[i][j]);	//不选,直接跳过该子树
		}
	}
	if(dp[1+n][k]>=0) return true;
	return false;
}
double solve(double l,double r) {
	double ans,mid;
	while(r-l>=eps) {
		mid=(l+r)/2;
		if(check(mid)) {
			ans=mid; l=mid;
		}
		else r=mid;
	}
	return ans;
}
int main() {
	scanf("%d%d",&k,&n);
	for(int i=1;i<=n;i++) {
		scanf("%lf%lf%d",&s[i],&p[i],&f[i]);
		sum+=p[i];
		add_edge(f[i],i);
	}
	dfs(0);
	double ans=solve(0,sum);
	printf("%.3lf",ans);
	return 0;
}
【JSOI2016】最佳团体的更多相关文章
- BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划
		BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划 又是一道卡精度卡得我头皮发麻的题-- 题面(--蜜汁改编版) YL大哥是24OI的大哥,有一天,他想要从\(N\)个候选人中选 ... 
- BZOJ_4753_[Jsoi2016]最佳团体_树形背包+01分数规划
		BZOJ_4753_[Jsoi2016]最佳团体_树形背包+01分数规划 Description JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号.方便起见,JYY的编号是0号.每个候选人 ... 
- BZOJ4753: [Jsoi2016]最佳团体(分数规划+树上背包)
		BZOJ4753: [Jsoi2016]最佳团体(分数规划+树上背包) 标签:题解 阅读体验 BZOJ题目链接 洛谷题目链接 具体实现 看到分数和最值,考虑分数规划 我们要求的是一个\(\dfrac{ ... 
- [JSOI2016]最佳团体 DFS序/树形DP
		题目 洛谷 P4322 [JSOI2016]最佳团体 Description 茜茜的舞蹈团队一共有\(N\)名候选人,这些候选人从\(1\)到\(N\)编号.方便起见,茜茜的编号是\(0\)号.每个候 ... 
- 【bzoj4753】[Jsoi2016]最佳团体  分数规划+树形背包dp
		题目描述 JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号.方便起见,JYY的编号是0号.每个候选人都由一位编号比他小的候选人Ri推荐.如果Ri=0则说明这个候选人是JYY自己看上的.为了 ... 
- BZOJ.4753.[JSOI2016]最佳团体(01分数规划 树形背包DP)
		题目链接 \(Description\) 每个点有费用si与价值pi,要求选一些带根的连通块,总大小为k,使得 \(\frac{∑pi}{∑si}\) 最大 \(Solution\) 01分数规划,然 ... 
- [Jsoi2016]最佳团体 BZOJ4753 01分数规划+树形背包/dfs序
		分析: 化简一下我们可以发现,suma*ans=sumb,那么我们考虑二分ans,之后做树形背包上做剪枝. 时间复杂度证明,By GXZlegend O(nklogans) 附上代码: #includ ... 
- Luogu  P4322 [JSOI2016]最佳团体
		JZdalao昨天上课讲的题目,话说JSOI的题目是真的不难,ZJOI的题目真的是虐啊! 题意很简单,抽象一下就是:有一棵树,一次只能选从根到某个节点上的链上的所有点,问从中取出k个节点所得到的总价值 ... 
- bzoj4753: [Jsoi2016]最佳团体(分数规划+树形依赖背包)
		菜菜推荐的“水题”虐了我一天T T...(菜菜好强强qwq~ 显然是个分数规划题,二分答案算出p[i]-mid*s[i]之后在树上跑依赖背包,选k个最大值如果>0说明还有更优解. 第一次接触树形 ... 
- 【BZOJ】4753: [Jsoi2016]最佳团体 01分数规划+树上背包
		[题意]n个人,每个人有价值ai和代价bi和一个依赖对象ri<i,选择 i 时 ri 也必须选择(ri=0时不依赖),求选择k个人使得Σai/Σbi最大.n<=2500,ai,bi< ... 
随机推荐
- Codepen 每日精选(2018-4-20)
			按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以打开原始页面. 图书打开的交互效果https://codepen.io/jcoulterde... 进度条交互效果http ... 
- window  nginx 简单搭建服务器访问静态资源
			nginx命令: 启动: start nginx 停止:nginx -s stop || nginx -s quit 注:stop是快速停止nginx,可能并不保存相关信息:quit是完整有序的停止 ... 
- Windows中Nginx配置nginx.conf不生效解决方法
			转:https://lucifer.blog.csdn.net/article/details/83860644?utm_medium=distribute.pc_relevant.none-task ... 
- IO——字节缓冲流
			缓冲流:BufferedInputStream / BufferedOutputStream 提高IO效率,减少访问磁盘的次数 数据存储在缓冲区,调用flush将缓存区的内容写入文件中,也可以直接cl ... 
- 共读《redis设计与实现》-单机(一)
			上一章我们讲了 redis 基本类型的数据结构 和 对象系统 ,这篇来说一下单机redis 的知识点. 一.数据库 一个数据库在redis中就有一个结构体,而数据库的结构体是由redisServer这 ... 
- element.insertAdjacentHTML
			一.概念 insertAdjacentHTML() 方法将指定的文本解析为 Element 元素,并将结果节点插入到DOM树中的指定位置.它不会重新解析它正在使用的元素,因此它不会破坏元素内的现有元素 ... 
- XCTF练习题---MISC---hong
			XCTF练习题---MISC---hong flag:BCTF{cute&fat_cats_does_not_like_drinking} 解题步骤: 1.观察题目,下载附件 2.下载文件后发 ... 
- Kafka Kerberos 安全认证
			本主要介绍在 Kafka 中如何配置 Kerberos 认证,文中所使用到的软件版本:Java 1.8.0_261.Kafka_2.12-2.6.0.Kerberos 1.15.1. 1. Kerbe ... 
- 【CSAPP】Bomb Lab实验笔记
			bomblab这节搞的是二进制拆弹,可以通俗理解为利用反汇编知识找出程序的六个解锁密码. 早就听闻BOMBLAB的大名,再加上我一直觉得反汇编是个很艰难的工作,开工前我做好了打BOSS心理准备.实际上 ... 
- 从OC角度思考OKR的底层逻辑
			原创不易,求分享.求一键三连 扩展阅读:什么是OKR OC:Organization Cultrue即组织文化,标题用OC纯粹为了装逼... 自从接受公司文化建设工作后,思维发生了很大的变化,文化, ... 
