洛谷$P4322\ [JSOI2016]$最佳团体 二分+$dp$
正解:二分+$dp$
解题报告:
这题长得好套路嗷,,,就一看就看出来是个$01$分数规划+树形$dp$嘛$QwQ$.
考虑现在二分的值为$mid$,若$mid\leq as$,则有$\frac{\sum p_i}{\sum s_i}\geq mid,\sum p_i-mid\cdot \sum s_i\geq 0$.
于是就把每个点的点权改为$mid\cdot s-p$.现在变成要选$K$个节点使得点权之和取$max$.
于是就树形$dp$呗?设$f_{i,j}$表示点$i$的子树中选了$j$个点的$max$,转移的时候强制点$i$必须要选就成.
$over$.
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define lf double
#define gc getchar()
#define t(i) edge[i].to
#define ri register int
#define rc register char
#define rb register bool
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i)
#define e(i,x) for(ri i=head[x];i;i=edge[i].nxt) const int N=+,inf=1e9;
const lf eps=1e-;
int n,K,sz[N];
lf f[N][N],q[N],tmp[N];
vector<int>V[N];
struct node{int s,p;}nod[N]; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il void merg(ri x,ri y)
{
rp(i,,K)tmp[i]=-inf;
rp(i,,sz[x])rp(j,,min(K-i,sz[y]))tmp[i+j]=max(f[x][i]+f[y][j],tmp[i+j]);
rp(i,,K)f[x][i]=max(f[x][i],tmp[i]);
}
void dfs(ri nw){ri siz=V[nw].size();sz[nw]=;rp(i,,siz-)dfs(V[nw][i]),merg(nw,V[nw][i]),sz[nw]+=sz[V[nw][i]];}
il bool check(lf dat){memset(f,-,sizeof(f));rp(i,,n)f[i][]=nod[i].p-dat*nod[i].s;dfs();return f[][K]>=;} int main()
{
freopen("4322.in","r",stdin);freopen("4322.out","w",stdout);
K=read()+;n=read();rp(i,,n){nod[i]=(node){read(),read()};V[read()].push_back(i);}
lf l=,r=;while(r-l>=eps){lf mid=(l+r)/;if(check(mid))l=mid;else r=mid;}printf("%.3lf\n",r);
return ;
}
洛谷$P4322\ [JSOI2016]$最佳团体 二分+$dp$的更多相关文章
- Bzoj4753/洛谷P4432 [JSOI2016]最佳团体(0/1分数规划+树形DP)
题面 Bzoj 洛谷 题解 这种求比值最大就是\(0/1\)分数规划的一般模型. 这里用二分法来求解最大比值,接着考虑如何\(check\),这里很明显可以想到用树形背包\(check\),但是时间复 ...
- LUOGU P4322 [JSOI2016]最佳团体(0/1分数规划+树形背包)
传送门 解题思路 一道0/1分数规划+树上背包,两个应该都挺裸的,话说我常数为何如此之大..不吸氧洛谷过不了啊. 代码 #include<iostream> #include<cst ...
- Luogu P4322 [JSOI2016]最佳团体
JZdalao昨天上课讲的题目,话说JSOI的题目是真的不难,ZJOI的题目真的是虐啊! 题意很简单,抽象一下就是:有一棵树,一次只能选从根到某个节点上的链上的所有点,问从中取出k个节点所得到的总价值 ...
- p4322 [JSOI2016]最佳团体
传送门 分析 我们不难发现这是一棵树 于是01分数规划然后树上dp即可 代码 #include<iostream> #include<cstdio> #include<c ...
- [JSOI2016]最佳团体 DFS序/树形DP
题目 洛谷 P4322 [JSOI2016]最佳团体 Description 茜茜的舞蹈团队一共有\(N\)名候选人,这些候选人从\(1\)到\(N\)编号.方便起见,茜茜的编号是\(0\)号.每个候 ...
- BZOJ4753: [Jsoi2016]最佳团体(分数规划+树上背包)
BZOJ4753: [Jsoi2016]最佳团体(分数规划+树上背包) 标签:题解 阅读体验 BZOJ题目链接 洛谷题目链接 具体实现 看到分数和最值,考虑分数规划 我们要求的是一个\(\dfrac{ ...
- loj#2071. 「JSOI2016」最佳团体
题目链接 loj#2071. 「JSOI2016」最佳团体 题解 树形dp强行01分规 代码 #include<cstdio> #include<cstring> #inclu ...
- BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划
BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划 又是一道卡精度卡得我头皮发麻的题-- 题面(--蜜汁改编版) YL大哥是24OI的大哥,有一天,他想要从\(N\)个候选人中选 ...
- 【BZOJ4753】最佳团体(分数规划,动态规划)
[BZOJ4753]最佳团体(分数规划,动态规划) 题面 BZOJ Description JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号.方便起见,JYY的编号是0号.每个候选人都由一 ...
随机推荐
- Redis 5.0新功能介绍
Redis 5.0 Redis5.0版是Redis产品的重大版本发布,我们先看一下它的最新特点: 新的流数据类型(Stream data type) https://redis.io/topics/s ...
- es6 promise简析
1.Promise的含义 所谓Promise,就是一个对象,用来传递异步操作的消息. Promise对象有以下两个特点: 对象的状态不受外界影响.Promise对象代表一个异步操作,有三种状态:Pen ...
- oracle用WHERE替代ORDER BY
ORDER BY 子句只在两种严格的条件下使用索引. ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序. ORDER BY中所有的列必须定义为非空. WHERE子句使用的索引和 ...
- hdu 5656 CA Loves GCD
CA Loves GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)To ...
- [转]vue - 前置工作 - 目录功能介绍
一个DEMOS的完整目录(由于GWF问题,我就不一一打开网站一个个去搜索并且解释了)可以去关注:https://www.cnblogs.com/ye-hcj build build.js(本文来自ht ...
- VMware 注册码
VMware 12 Pro 永久许可证激活密钥 5A02H-AU243-TZJ49-GTC7K-3C61NVF5XA-FNDDJ-085GZ-4NXZ9-N20E6UC5MR-8NE16-H81WY- ...
- 浅谈集合框架二 List、Set常用方法
最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...
- P1043 查找小于x的最大元素
题目描述 现在告诉你一个长度为 \(n\) 的有序数组 \(a_1, a_2, ..., a_n\) ,以及 \(q\) 次询问,每次询问会给你一个数 \(x\) ,对于每次询问,你需要输出数组 \( ...
- 开源项目使用 appveyor 自动构建
我写了几个开源项目,我想要有小伙伴提交的时候自动运行单元测试,自动运行编译,这样可以保证小伙伴提交清真的代码 本文将会告诉大家如何接入 appveyor 自动构建方案,在 Github 上给自己的开源 ...
- Java中i++和++i
直接上代码: int i = 0; for (++i; ++i <= 2; ++i) { System.out.println("循环内的i=" + i); } S ...