[JZOJ4512][JSOI2016]最佳团队
来源:互联网 发布:淘宝看数据的插件 编辑:程序博客网 时间:2024/06/12 01:37
题目大意
一棵树,有
每个非根节点都有两个权值
要求选择
并且所选节点一定包括根,并且如果选择了节点
题目分析
看见最大化的分式,显然要使用
二分答案转化为判定性问题,计算是否存在权值和小于零的选择方案。
由于这里有树形依赖关系,那我们需要用一个神奇的方法做树形
注意到
所以我们可以按照
这个
时间复杂度
代码实现
#include <iostream>#include <climits>#include <cfloat>#include <cstdio>#include <cctype>using namespace std;typedef double db;int read(){ int x=0,f=1; char ch=getchar(); while (!isdigit(ch)) f=(ch=='-')?-1:f,ch=getchar(); while (isdigit(ch)) x=x*10+ch-'0',ch=getchar(); return x*f;}const db INF=DBL_MAX/3;const db EPS=0.0001;const int N=2550;const int K=2550;int fa[N],last[N],tov[N],next[N],s[N],p[N],size[N],id[N];int n,k,tot,idx,sum;db f[N][K],v[N];db ans;void insert(int x,int y){ tov[++tot]=y,next[tot]=last[x],last[x]=tot;}void dfs(int x){ size[id[++idx]=x]=1; for (int i=last[x],y;i;i=next[i]) dfs(y=tov[i]),size[x]+=size[y];}bool check(db now){ for (int i=2;i<=n+1;i++) { v[i]=s[id[i]]*now-p[id[i]]; for (int j=0;j<=k;j++) f[i][j]=INF; } f[2][0]=0; for (int i=2;i<=n;i++) { for (int j=0;j<=k&&j<=i-2;j++) { if (f[i][j]<f[i+size[id[i]]][j]) f[i+size[id[i]]][j]=f[i][j]; if (j<k&&f[i+1][j+1]>f[i][j]+v[i]) f[i+1][j+1]=f[i][j]+v[i]; } } return f[n+1][k]>0;}double binary_search(){ db l=0,r=sum,mid,ret; while (l+EPS<r) { mid=(l+r)/2; if (check(mid)) r=mid; else ret=mid,l=mid; } return ret;}int main(){ freopen("team.in","r",stdin),freopen("team.out","w",stdout); k=read(),n=read(); for (int i=1;i<=n;i++) { s[i+1]=read(),sum+=(p[i+1]=read()),fa[i+1]=read(); insert(++fa[i+1],i+1); } n++; dfs(1); ans=binary_search(); printf("%.3lf\n",ans); fclose(stdin),fclose(stdout); return 0;}
0 0
- [JZOJ4512][JSOI2016]最佳团队
- JZOJ4512. 【JSOI2016】最佳团队
- 【JSOI2016】最佳团队
- 【JSOI2016】最佳团队
- 【JSOI2016】最佳团队
- 4753: [Jsoi2016]最佳团体
- BZOJ4753 [Jsoi2016]最佳团体
- bzoj4753: [Jsoi2016]最佳团体
- bzoj4753: [Jsoi2016]最佳团体
- BZOJ 4753: [Jsoi2016]最佳团体
- [bzoj4753][Jsoi2016]最佳团体 树上背包+二分
- bzoj 4753: [Jsoi2016]最佳团体 二分答案+树形dp
- BZOJ 4753: [Jsoi2016]最佳团体 树形背包 01分数规划
- [BZOJ]4753: [Jsoi2016]最佳团体 01分数规划+树形DP
- 【分数规划+DFS序上DP】BZOJ4753 [Jsoi2016]最佳团体
- [二分+DFS序上DP]BZOJ 4753—— [Jsoi2016]最佳团体
- 团队最佳规模是怎样?
- CSS最佳实践团队开发
- 深度学习(三十八)卷积神经网络入门学习(2.0)
- Android App性能优化步骤及电量优化与service优化
- C++中如何对单向链表操作
- JAVA中的注解(Annotation)
- junit4和spring test测试之AbstractTransactionalJUnit4SpringContextTests详解
- [JZOJ4512][JSOI2016]最佳团队
- ARM基础系列——ARM指令集
- HDU2014 青年歌手大奖赛_评委会打分
- 数据结构之数组
- find和ls文件查找
- 在Eclipse中使用JUnit4进行单元测试(初级篇)
- 第一章:Introducing DirectX
- acm之递归题目5
- js文件报错,去除js验证