传送门

解题思路

  一道0/1分数规划+树上背包,两个应该都挺裸的,话说我常数为何如此之大。。不吸氧洛谷过不了啊。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath> using namespace std;
const int MAXN = 2505;
const double eps = 1e-6; inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?0:1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return f?x:-x;
} int n,k,s[MAXN],p[MAXN],head[MAXN],cnt;
int to[MAXN<<1],nxt[MAXN<<1];
double f[MAXN][MAXN],ans; inline void add(int bg,int ed){
to[++cnt]=ed,nxt[cnt]=head[bg],head[bg]=cnt;
} int dfs(int x,int fa,double lim){
f[x][0]=0;
int sum=1,u;
for(register int i=head[x];i;i=nxt[i]){
u=to[i];if(u==fa) continue;
sum+=dfs(u,x,lim);
for(register int j=sum;j>=0;j--)
for(register int t=j;t>=0;t--)
f[x][j]=min(f[x][j],f[u][t]+f[x][j-t]);
}
if(sum==1) {f[x][1]=(double)s[x]*lim-p[x];return sum;}
for(register int j=sum;j>0;j--)
f[x][j]=f[x][j-1]+(double)s[x]*lim-p[x];
return sum;
} inline bool check(double lim){
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++) f[i][j]=1e9;
dfs(0,0,lim);
return f[0][k+1]<=0?1:0;
} int main(int argc, char const *argv[]){
k=rd();n=rd();int x;
for(int i=1;i<=n;i++) {
s[i]=rd(),p[i]=rd();
x=rd();add(i,x);add(x,i);
}
double l=0,r=10001,mid;
while(fabs(r-l)>=eps){
mid=(l+r)/2;
if(check(mid)) {ans=mid;l=mid;}
else r=mid;
}
printf("%.3lf",ans);
return 0;
}

LUOGU P4322 [JSOI2016]最佳团体(0/1分数规划+树形背包)的更多相关文章

  1. [Jsoi2016]最佳团体 BZOJ4753 01分数规划+树形背包/dfs序

    分析: 化简一下我们可以发现,suma*ans=sumb,那么我们考虑二分ans,之后做树形背包上做剪枝. 时间复杂度证明,By GXZlegend O(nklogans) 附上代码: #includ ...

  2. bzoj 4753 [Jsoi2016]最佳团体——0/1分数规划

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4753 0/1分数规划裸题. #include<iostream> #includ ...

  3. Luogu P4322 [JSOI2016]最佳团体

    JZdalao昨天上课讲的题目,话说JSOI的题目是真的不难,ZJOI的题目真的是虐啊! 题意很简单,抽象一下就是:有一棵树,一次只能选从根到某个节点上的链上的所有点,问从中取出k个节点所得到的总价值 ...

  4. bzoj 4753: [Jsoi2016]最佳团体【01分数规划+二分+树上背包】

    01分数规划,二分答案然后把判别式变成Σp[i]-Σs[i]*mid>=0,然后树上背包判断,设f[i][j]为在i点子树里选j个的最大收益,随便背包一下就好 最丧病的是神卡常--转移的时候要另 ...

  5. 【bzoj4753】[Jsoi2016]最佳团体 分数规划+树形背包dp

    题目描述 JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号.方便起见,JYY的编号是0号.每个候选人都由一位编号比他小的候选人Ri推荐.如果Ri=0则说明这个候选人是JYY自己看上的.为了 ...

  6. Bzoj4753/洛谷P4432 [JSOI2016]最佳团体(0/1分数规划+树形DP)

    题面 Bzoj 洛谷 题解 这种求比值最大就是\(0/1\)分数规划的一般模型. 这里用二分法来求解最大比值,接着考虑如何\(check\),这里很明显可以想到用树形背包\(check\),但是时间复 ...

  7. 洛谷$P4322\ [JSOI2016]$最佳团体 二分+$dp$

    正解:二分+$dp$ 解题报告: 传送门$QwQ$ 这题长得好套路嗷,,,就一看就看出来是个$01$分数规划+树形$dp$嘛$QwQ$. 考虑现在二分的值为$mid$,若$mid\leq as$,则有 ...

  8. BZOJ.4753.[JSOI2016]最佳团体(01分数规划 树形背包DP)

    题目链接 \(Description\) 每个点有费用si与价值pi,要求选一些带根的连通块,总大小为k,使得 \(\frac{∑pi}{∑si}\) 最大 \(Solution\) 01分数规划,然 ...

  9. p4322 [JSOI2016]最佳团体

    传送门 分析 我们不难发现这是一棵树 于是01分数规划然后树上dp即可 代码 #include<iostream> #include<cstdio> #include<c ...

随机推荐

  1. 笔记-Linux包管理命令

    一.apt, apt-get, dpkg命令 apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索.安装.升级.卸载软件或操作系统.使用apt-ge ...

  2. BCZM : 1.15

    数独 解法一:广度优先搜索. 解法二:先填满中间矩阵,其他区域通过矩阵置换求出.

  3. mui请求数据接口问题

    今天我在本地模拟做一个数据请求,第一次用的mui自带的方法来请求数据,当时我的本地接口地址是http://localhost:8087/jeecg/sightseerController.do?che ...

  4. CSS——背景及应用

    CSS 可以添加背景颜色和背景图片,以及进行图片设置. none : 无背景图(默认的) url : 使用绝对或相对地址指定背景图像 background-image 属性允许指定一个图片展示在背景中 ...

  5. thinkphp 防止XSS(跨站脚本攻击)

    XSS(跨站脚本攻击)可以用于窃取其他用户的Cookie信息,要避免此类问题,可以采用如下解决方案: 直接过滤所有的JavaScript脚本: 转义Html元字符,使用htmlentities.htm ...

  6. 转-vector与list的区别

    转自:C++ vector和list的区别 数据结构的区别 vector vector与数组类似,拥有一段连续的内存空间,并且起始地址不变.便于随机访问,时间复杂度为O(1),但因为内存空间是连续的, ...

  7. ionic-CSS:ionic 按钮

    ylbtech-ionic-CSS:ionic 按钮 1.返回顶部 1. onic 按钮 按钮是移动app不可或缺的一部分,不同风格的app,需要的不同按钮的样式. 默认情况下,按钮显示样式为:dis ...

  8. flutter 修饰盒子

    decoration: BoxDecoration( borderRadius: BorderRadius.circular(), //圆角 gradient: RadialGradient( col ...

  9. Linux_磁盘分区、挂载、查看

    一.挂载 1.查看设备的挂载情况 lsblk或lsblk -f 2.挂载 需求 :给我们的Linux系统增加一个新的硬盘,并且挂载到/home/newdisk 说明:我们以增加一块硬盘为例来熟悉一下磁 ...

  10. PAT_A1020#Tree Traversals

    Source: PAT A1020 Tree Traversals (25 分) Description: Suppose that all the keys in a binary tree are ...