「JSOI2016」最佳团体

01分数规划

显然可以二分最大比值x,来验证是否可行

记当前比值为x,总战斗值为P与总招募费用为S

则 P - x*S >= 0

设 wi = pi - x*si

即 w1 + w2 + ... + wk >= 0

就转化为选k个节点,它们的w值非负,树上简单地dp一下就可求得

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 const int N = 2505;
 5
 6 double l, r = 1e4, mid, f[N][N], w[N], ans, eps = 1e-5;
 7 int siz[N], fa[N], p[N], s[N];
 8 int n, m, first[N], cnt;
 9 struct Edge {
10     int to, next;
11 } e[N];
12
13 void dfs(int u) {
14     siz[u] = 1;
15     f[u][1] = w[u];
16     for (int i = first[u]; i != -1; i = e[i].next) {
17         int v = e[i].to;
18         dfs(v);
19         siz[u] += siz[v];
20         for (int j = min(siz[u], m); j >= 2; j--)
21             for (int k = 1; k <= min(j - 1, siz[v]); k++) f[u][j] = max(f[u][j], f[v][k] + f[u][j - k]);
22     }
23 }
24
25 bool check(double x) {
26     memset(f, -0x3f, sizeof(f));
27     for (int i = 0; i <= n; i++) f[i][0] = 0;
28     for (int i = 1; i <= n; i++) w[i] = (double)p[i] - s[i] * x;
29     dfs(0);
30     return f[0][m] >= 0;
31 }
32
33 void add(int u, int v) {
34     e[cnt].to = v;
35     e[cnt].next = first[u];
36     first[u] = cnt++;
37 }
38
39 int main() {
40     memset(first, -1, sizeof(first));
41     cin >> m >> n;
42     m++;
43     for (int i = 1; i <= n; i++) {
44         scanf("%d%d%d", &s[i], &p[i], &fa[i]);
45         add(fa[i], i);
46     }
47     while (r - l > eps) {
48         mid = (r + l) / 2;
49         dfs(0);
50         if (check(mid))
51             l = mid + eps, ans = mid;
52         else
53             r = mid - eps;
54     }
55     printf("%.3f\n", ans);
56 }

原文地址:https://www.cnblogs.com/ympc2005/p/12307225.html

时间: 2024-09-30 23:43:56

「JSOI2016」最佳团体的相关文章

#2071. 「JSOI2016」最佳团体

\(01\)分数规划不能直接套板子了,窝一开始想着用什么简单的方法缩点(每个点只有一个入度啊)然后跑拓扑图求解(保存每个点的最优值,通过牛顿迭代减少运算次数),问题是这样还要考虑人数,可不可做都不知道.转念一想,既然每个点只有一个入度,那么环从\(0\)号点\(jyy(orz)\)开始是肯定无法到达的(无法从任何一个点进入环).题目没说不可行就一定是可行的(雾),直接从\(0\)号点遍历即可,自然而然的拓扑图且还有个容易操作的性质,任意两条路不会汇合,理由如上,路只能分散,这不就是颗树吗?实现的

loj#2076. 「JSOI2016」炸弹攻击 模拟退火

目录 题目链接 题解 代码 题目链接 loj#2076. 「JSOI2016」炸弹攻击 题解 模拟退火 退火时,由于答案比较小,但是温度比较高 所以在算exp时最好把相差的点数乘以一个常数让选取更差的的概率降低 代码 #include<ctime> #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> #define gc getchar() #define

loj2073 「JSOI2016」扭动的回文串

ref 主要是要理解"撑到"最长这个概念 (为啥我的代码这么长QAQ #include <iostream> #include <cstdio> using namespace std; typedef unsigned long long ull; int n, pa[200005], pb[200005], ans; ull bse1[200005], bse2[200005], hsa1[200005], hsa2[200005], hsb1[200005

【2018.10.1】【JSOI2016】最佳团体(bzoj4751)

一看到“比值”最大(性价比最高)就知道跟分数规划有关系了.(这里讲过分数规划) 然后看到 要选一个候选人 必须选他的前置,画画图就知道是一棵树. 所以这道题是二分比值,然后判断在树上能否得到这个答案. 那怎么判断? 这篇的T1讲过,典型的树上背包,像那道T1一样在树上暴力转移即可.其实这题的父子依赖性质跟那道T1差不多,因为连通块就是一片父子的依赖关系(当然最上边的根节点的祖先是还没处理到的). 那树上每个点都要遍历一下它的所有儿子,对于每个儿子还要枚举以这个儿子为根的子树中选出的点. 原文地址

「JSOI2016」无界单词

题目描述 对于一个单词 $S$ ,如果存在一个长度 $l$,满足 $0\lt l\lt |S|$,并且使得 $S$ 长度为 $l$ 的前缀与 $S$ 长度为 $l$ 的后缀相同,JYY 则称 $S$ 是有界的.比如 `aabaa` 和 `ababab` 就都是有界的字符串.如果一个单词不存在这样的 $l$ ,则 JYY 称之为无界单词. 现在考虑所有仅由字母 `a` 和 `b` 组成的长度为 $N$ 的字符串,JYY想知道:1. 一共有多少个无界单词?2. 这些无界单词中,按字典序排列第 $K$

分布式系统关注点——99%的人都能看懂的「熔断」以及最佳实践

当我们工作所在的系统处于分布式系统初期的时候,往往这时候每个服务都只部署了一个节点. 如果想学习Java工程化.高性能及分布式.深入浅出.微服务.Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家. 那么在这样的背景下,如果某个服务A需要发布一个新版本,往往会对正在运行的其它依赖服务A的程序产生影响.甚至,一旦服务A的启动预热过程耗时过长,问题会更严重,大量请求会阻塞,产

将 QQ 音乐、网易云音乐和虾米音乐资源「整合」一起的Chrome 扩展Listen 1

原文地址:http://whosmall.com/?post=418 本文标签: Chrome扩展 Chrome浏览器 Chrome扩展Listen1 音乐资源整合 Listen1安装方法 在 Chrome 上安装了这款名为 Listen 1 的插件,妈妈可是再也不用担心你找不到想听的歌了.它将 QQ 音乐.网易云音乐以及虾米音乐的音乐资源「整合」在了一起,你只需要输入音乐关键词,就可以方便地三大曲库中跳转搜索. 安装方法 Listen 1 的安装方法与一般的 Chrome Extension

从「集装箱」思考Docker风潮

从「集装箱」思考Docker风潮 -- Docker潮流下的赢家策略 By 高焕堂 (台灣Docker聯盟 主席) 2015/02/20 前言 在许多革命性转折里,经常出现集装箱的身影:它就像幸运草一般,总是带来许多幸福和财运.现在Docker风起云涌,再现集装箱身影,如果开放视野.大力支持它,持续发挥它的潜能和力量,则幸运草就会出现在我们身旁了. 由于Docker集装箱带来的商机,其最直接的受益者是软件管理者(或称维运者),例如软件测试工具业者.测试人员等.因此在今天,不论您是开发者或是维运者

听说「学生会」水很深,你准备「趟」么?

都说,大学是个小社会,只有经历过大学,才能学会「成长」. 不少人感慨,真正进入大学之后,才发现,这是和想象中,截然不同的两个世界.大学绝非旁人口中的「象牙塔」,没有多得压死人的作业,可以无拘无束,想做什么就做什么. 在这里,成绩虽不再是评判高低的「唯一标准」,但在此基础上增添的人际交往.实践经验「考核」,往往让我们的大学生活,压力倍增. 学生会,作为大学校园的「缩影」,一个一向被定义为:积累经验和人脉,教会你成长的绝佳地方,每年都备受新生们的推崇.挤破脑袋,各种交报名表,想要争取在学生会的一席之