题目大意:有一棵$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:

#include <algorithm>
#include <cstdio>
#include <cstring>
#define maxn 111
const double eps = 1e-3;int head[maxn], cnt;
struct Edge {int to, nxt;
} e[maxn << 1];
inline void addedge(int a, int b) {e[++cnt] = (Edge) { b, head[a] }; head[a] = cnt;e[++cnt] = (Edge) { a, head[b] }; head[b] = cnt;
}int n, m;
int a[maxn], b[maxn];
double w[maxn], f[maxn][maxn], res;inline void chkmax(double &a, double b) { if (a < b) a = b; }
void dfs(int u, int fa = 0) {f[u][0] = 0, f[u][1] = w[u];for (int i = head[u]; i; i = e[i].nxt) {int v = e[i].to;if (v != fa) {dfs(v, u);for (int j = m; j; --j)for (int k = 0; k < j; ++k)chkmax(f[u][j], f[u][j - k] + f[v][k]);}}chkmax(res, f[u][m]);
}
int main() {scanf("%d%d", &n, &m); m = n - m;for (int i = 1; i <= n; ++i) scanf("%d", a + i);for (int i = 1; i <= n; ++i) scanf("%d", b + i);for (int i = 1, a, b; i < n; ++i) {scanf("%d%d", &a, &b);addedge(a, b);}double l = 0, r = 10000;while (l + eps < r) {const double mid = (l + r) / 2;memset(f, 0xc2, sizeof f); res = **f;for (int i = 1; i <= n; ++i) w[i] = a[i] - b[i] * mid;dfs(1);if (res >= 0) l = mid;else r = mid;}printf("%.1lf\n", l);return 0;
}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/10352798.html

[洛谷P1642]规划相关推荐

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

    洛谷4951 地震 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #define ...

  2. 洛谷 P2046 BZOJ 2007 海拔(NOI2010)

    题目描述 YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作 一个正方形,每一个区域也可看作一个正方形.从而,YT城市中包括(n+1)×(n+1)个 ...

  3. 并查集——营救(洛谷 P1396)

    题目选自洛谷P1396 看到最大的最小很多人想到二分,但是可以有更好的解法. 我们不妨用并查集维护这个图,将边从小到大排序,每次取出边权最小的边,若该边的起点与终点未在一个集合内,就将其合并.当源点与 ...

  4. 2019.6.7 一场搜索专题的考试【including 洛谷·血色先锋队,入门OJ·兴建高铁,珠光宝气阁

    这次分数还好.但全是搜索题还没上200就有点打击人了--[本狸才177QAQ 血色先锋队/血色敢死队 传送门:洛谷P1332 & 入门OJ P2259 Description 邪魔天国领主复活 ...

  5. 洛谷日报 2020年3月前索引

    2020 2019 2018 感觉洛谷日报全是干货!!!先记下来再说 2020 年洛谷日报索引 3 月 #260[dove]Church 编码(和 Lambda 演算) https://www.luo ...

  6. 洛谷日报索引(2020、2019、2018)

    历年洛谷日报索引 2020 2019 2018 感觉洛谷日报全是干货!!!先记下来再说 2020 年洛谷日报索引 3 月 #260[dove]Church 编码(和 Lambda 演算) https: ...

  7. [转载]洛谷日报索引

    2019年 6月 #183[朝田诗乃]你以为莫队只能离线?莫队的在线化改造 https://shoko.blog.luogu.org/moqueue #182[Heartlessly ]常用距离算法详 ...

  8. 洛谷 P2704 炮兵阵地 题解

    洛谷 P2704 炮兵阵地 题解 洛谷 P2704 题目 司令部的将军们打算在NNNMMM的网格地图上部署他们的炮兵部队.一个NNNMMM的地图由NNN行MMM列组成,地图的每一格可能是山地(用&qu ...

  9. 洛谷or牛客数据结构+算法

    栈思想:先进后出 tips:栈里能放下标就放下标 (牛客)小c的计事本(直接用stack可以简化代码,且不会被自己绕晕,当时没意识到) (牛客)吐泡泡(没意识到用栈),(牛客)好串 1.后缀表达式(栈 ...

最新文章

  1. 阿里终面:怎么用 UDP 实现 TCP?
  2. 那些不被关注但很重要的html标签
  3. DCMTK:将DICOM结构化报告文件的内容转换为XML格式
  4. C与java通讯小结
  5. C#代码:获取与指定颜色相似的.NET自带颜色
  6. ant 改变表格数据_表格技巧—Excel表格怎么替换数字
  7. Java 动态加载类
  8. 目前人们把通用计算机,计算机与信息社会基础知识测试题.doc
  9. JAVA基础--JAVA中的反射机制详解(转)
  10. linux下修改防火墙端口对外开放方法
  11. 计算机专业代码qian,专业分类号及学科代码对照表.doc
  12. 用JPEXS软件实现swf反编译-逆向调试方法
  13. MS509Team----------------Cknife
  14. js url传参进行编码
  15. 圣人、仁人、君子、善人、士、小人之名简释
  16. 使用Scrapy模拟登陆人人网
  17. 电阻单位符号Ω怎么读?
  18. 华硕天选3笔记本电脑WiFi功能消失
  19. 80个Python经典资料(教程+源码+工具)汇总
  20. 看了本文让你laravel安装laravel-queue-rabbitmq一路顺风

热门文章

  1. error page怎么解决_Firefox 登录feedly时出现PR_CONNECT_RESET_ERROR的解决方案
  2. python的装饰器很有用吗_你真的了解python装饰器么
  3. 计算机 运行新ie 命令,电脑中通过执行命令来清除IE浏览器隐私数据的方法
  4. while循环random结合_Python程序控制结构 | 循环结构
  5. 超经典两万字,MySQL数据库快速入门。
  6. 以太坊节点开放RPC端口容易被攻击及网络安全配置笔记
  7. 桌面上的Flutter:Electron又多了个对手
  8. 基于SSM的Java Web应用开发原理初探
  9. Introducing DataFrames in Apache Spark for Large Scale Data Science(中英双语)
  10. Swift中的Sequence基本的使用