题目大意:有一棵$n(n\leqslant100)$个点的树,每个点有两个权值$a,b$,要求选择一个$m$个点的连通块$S$,最大化$\dfrac{\sum\limits_{i\in S}a_i}{\sum\limits_{i\in S}b_i}$

题解:$01$分数规划,这一类的问题可以二分答案来做,二分这个值,然后把第$i$个点的权值变为$a_i-b_imid$,跑一遍树形$DP$,$f_{i,j}$表示以第$i$个点为根,连通块大小为$j$的最大值。看答案是否大于$0$,是则把答案变大,否则缩小答案

卡点:做背包时做反了,$01$背包变成完全背包,精度不够。

C++ Code:

  1. #include <algorithm>
  2. #include <cstdio>
  3. #include <cstring>
  4. #define maxn 111
  5. const double eps = 1e-3;
  6.  
  7. int head[maxn], cnt;
  8. struct Edge {
  9. int to, nxt;
  10. } e[maxn << 1];
  11. inline void addedge(int a, int b) {
  12. e[++cnt] = (Edge) { b, head[a] }; head[a] = cnt;
  13. e[++cnt] = (Edge) { a, head[b] }; head[b] = cnt;
  14. }
  15.  
  16. int n, m;
  17. int a[maxn], b[maxn];
  18. double w[maxn], f[maxn][maxn], res;
  19.  
  20. inline void chkmax(double &a, double b) { if (a < b) a = b; }
  21. void dfs(int u, int fa = 0) {
  22. f[u][0] = 0, f[u][1] = w[u];
  23. for (int i = head[u]; i; i = e[i].nxt) {
  24. int v = e[i].to;
  25. if (v != fa) {
  26. dfs(v, u);
  27. for (int j = m; j; --j)
  28. for (int k = 0; k < j; ++k)
  29. chkmax(f[u][j], f[u][j - k] + f[v][k]);
  30. }
  31. }
  32. chkmax(res, f[u][m]);
  33. }
  34. int main() {
  35. scanf("%d%d", &n, &m); m = n - m;
  36. for (int i = 1; i <= n; ++i) scanf("%d", a + i);
  37. for (int i = 1; i <= n; ++i) scanf("%d", b + i);
  38. for (int i = 1, a, b; i < n; ++i) {
  39. scanf("%d%d", &a, &b);
  40. addedge(a, b);
  41. }
  42. double l = 0, r = 10000;
  43. while (l + eps < r) {
  44. const double mid = (l + r) / 2;
  45. memset(f, 0xc2, sizeof f); res = **f;
  46. for (int i = 1; i <= n; ++i) w[i] = a[i] - b[i] * mid;
  47. dfs(1);
  48. if (res >= 0) l = mid;
  49. else r = mid;
  50. }
  51. printf("%.1lf\n", l);
  52. return 0;
  53. }

  

[洛谷P1642]规划的更多相关文章

  1. 分数规划模板(洛谷P4377 [USACO18OPEN]Talent Show)(分数规划,二分答案,背包)

    分数规划是这样一个东西: 给定若干元素,每个元素有两个属性值\(a_i,b_i\),在满足题目要求的某些限制下选择若干元素并求出\(\frac{\sum a}{\sum b}\)的最大值. 如果没有限 ...

  2. 【POJ3621】【洛谷2868】Sightseeing Cows(分数规划)

    [POJ3621][洛谷2868]Sightseeing Cows(分数规划) 题面 Vjudge 洛谷 大意: 在有向图图中选出一个环,使得这个环的点权\(/\)边权最大 题解 分数规划 二分答案之 ...

  3. Bzoj1486/洛谷P3199 最小圈(0/1分数规划+spfa)/(动态规划+结论)

    题面 Bzoj 洛谷 题解(0/1分数规划+spfa) 考虑\(0/1\)分数规划,设当前枚举到的答案为\(ans\) 则我们要使(其中\(\forall b_i=1\)) \[ \frac{\sum ...

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

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

  5. 【洛谷P2494】 [SDOI2011]保密(分数规划+最小割)

    洛谷 题意: 题意好绕好绕...不想写了. 思路: 首先类似于分数规划做法,二分答案得到到每个点的最小危险度. 然后就是在一个二分图中,两边撤掉最少的点(相应代价为上面算出的危险度)及相应边,使得中间 ...

  6. 洛谷P2542 [AHOI2005]航线规划(LCT,双连通分量,并查集)

    洛谷题目传送门 太弱了不会树剖,觉得LCT好写一些,就上LCT乱搞,当LCT维护双连通分量的练手题好了 正序删边是不好来维护连通性的,于是就像水管局长那样离线处理,逆序完成操作 显然,每个点可以代表一 ...

  7. 洛谷4951 地震 bzoj1816扑克牌 洛谷3199最小圈 / 01分数规划

    洛谷4951 地震 #include<iostream> #include<cstdio> #include<algorithm> #define go(i,a,b ...

  8. 洛谷 P2542 [AHOI2005]航线规划(Link-cut-tree)

    题面 洛谷 bzoj 题解 离线处理+LCT 有点像星球大战 我们可以倒着做,断边变成连边 我们可以把边变成一个点 连边时,如果两个点本身不联通,就\(val\)赋为\(1\),并连接这条边 如果,两 ...

  9. 关于三目运算符与if语句的效率与洛谷P2704题解

    题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最 ...

随机推荐

  1. idea alt+enter导包时被锁定导某一个包时的解决方法

    在只有一个包指向的时候,把光标放在Test这种字符之间的话 就会直接导这个 所以把光标放在最后就可以导别的了

  2. 四、Django设置相关

    1.全局设置 setttings文件 import os import sys # Build paths inside the project like this: os.path.join(BAS ...

  3. selenium webdriver API详解(二)

    本系列主要讲解webdriver常用的API使用方法(注意:使用前请确认环境是否安装成功,浏览器驱动是否与谷歌浏览器版本对应) 一:获取当前页面的title(一般获取title用于断言) from s ...

  4. katalon系列八:Katalon Studio图片识别

    Katalon Studio自带集成了图片识别功能,有2个比较有用的图片识别相关的命令:Wait For Image Present和Click Image.这里重点讲下Click Image命令: ...

  5. Unity ScriptableObject自定义属性显示

    1. 继承Editor,重写OnInspectorGUI方法 Editor官方文档 需求 将TestClass中intData属性和stringData按指定格式显示. 实现 定义一个测试类TestC ...

  6. OpenLDAP搭建部署

    安装环境: linu系统:      centos7.2版本 OenLDAP:/openldap-2.4.44 下载地址:ftp://ftp.openldap.org/pub/OpenLDAP/ope ...

  7. vs2017 asp.net FriendlyUrls 新特性

    这个包如何使用呢?其实很简单,只需将nuget包添加到项目中,再调用routes.EnableFriendlyUrls(),你就可以通过/Foo来访问/Foo.aspx了!你也能够利用URL片段将更多 ...

  8. POWERDESIGNER生成的代码有引号

    昨天在用powerdesigner画的一个导入ORACLE中.发现都带了双引号, 当时没在意,以为是分隔符.那想后要在ORACLE查询表是一定要输入双引号才能查询.. 后来才知道而这在oracle 中 ...

  9. Scrum立会报告+燃尽图(十月二十六日总第十七次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246 项目地址:https://git.coding.net/zhang ...

  10. textarea中文提交乱码问题解决

    在A.jsp中有如下语句: <textarea rows="10" cols="30" name="texts"><%=r ...