这道题有一点点树上dp的意思(大佬轻喷

我刚拿到这道题的时候毫无头绪,只知道这道题要二分答案

为什么是二分答案???

题目:

目前赛道修建的方案尚未确定。你的任务是设计一

种赛道修建的方案,使得修建的 m 条赛道中长度

最小的赛道长度最大
(即 m 条赛道中最短赛道的

长度尽可能大)

通常情况下出现 最小的……最大 或者 最大的……最小 时就是二分答案。

如何二分答案???

这道题问的是最小的长度最大, 那一定是

二分长度, 即我们可以先设开始时

l = 0, r = 最大值  mid = (l + r) / 2

我们求出的每一条长度大于等于mid的赛道我们称之为合法, 如果合法的赛道数大于m, 那么说明mid <= 真实答案, 所以我们就让 l = mid + 1,继续二分, 否则就让 r = mid。

如何转移???

其实刚开始瞎做的时候我并没有发现这是个树上dp(逃

有这么一个图,我们先从每个子树考虑

我们假设, 2这个节点为根的子树中,从5到2再到7的这条路径是满足条件的合法赛道,那么我们可以直接答案加1, 然后把这两条边删去。

那么可能会剩下几条边。

我们可以发现, 如果要用2这个节点去构成长度合法的赛道, 要么是2节点开始从0往上走,去凑出合法长度, 要么是挑一个2下面的边(我们先假设为6到2这条边)往上去凑, 最多只能挑一条的边,那么我们一定是要挑一条没用过的最长的边。

n = 50000, 我们可以用multiset的lower_bound来实现每个节点的边的有序和查找某条边是否可以凑成合法的边。

这可以这么实现

int dfs(int x, int fa, int mid) {
int len = 0;
multiset<int> s;
for (int i = p[x]; i != -1; i = e[i].nxt) {
int v = e[i].v, w = e[i].w, l;
if (v == fa) {
continue;
}
l = dfs(v, x, mid) + w;
opt[x] += opt[v];
if (l >= mid) {
opt[x]++;
} else {
s.insert(l);
}
}
while (!s.empty()) {
int now = (*s.begin());
s.erase(s.begin());
multiset<int>::iterator it = s.lower_bound(mid - now);
if (it != s.end()) {
s.erase(it);
opt[x]++;
} else {
len = now;
}
}
return len;
}

至于菊花图的话可能会被卡???我没试过,如果担心的话可以特判一下,只需要一次排序然后lower_bound就OK了。

8.19更新

有同学不知道菊花图是什么



就是介个东西QWQ

菊花图通常会被卡,所以需要特判或者寻找更高效算法( 一般是特判辣, 因为菊花图上的问题大部分比较简单的 )

好像也没多少树上dp

题解 NOIP2018【赛道修建】—— 洛谷的更多相关文章

  1. 竞赛题解 - NOIP2018 赛道修建

    \(\mathcal {NOIP2018}\) 赛道修建 - 竞赛题解 额--考试的时候大概猜到正解,但是时间不够了,不敢写,就写了骗分QwQ 现在把坑填好了~ 题目 (Copy from 洛谷) 题 ...

  2. 【LG5021】[NOIP2018]赛道修建

    [LG5021][NOIP2018]赛道修建 题面 洛谷 题解 NOIP之前做过增强版还没做出来\(QAQ\) 一看到题目中的最大值最小,就很容易想到二分答案 重点是考虑如何\(check\) 设\( ...

  3. Luogu5021 [NOIP2018]赛道修建

    Luogu5021 [NOIP2018]赛道修建 一棵大小为 \(n\) 的树,边带权.选 \(m\) 条链使得长度和最小的链最大. \(m<n\leq5\times10^4\) 贪心,二分答案 ...

  4. 【题解】魔板—洛谷P1275。

    话说好久没更博了. 最近学了好多知识懒的加进来了. 有幸认识一位大佬. 让我有了继续更博的兴趣. 但这是一个旧的题解. 我在某谷上早就发过的. 拿过来直接用就当回归了吧. 其实这道题有一个特别关键的思 ...

  5. 【数论】8.30题解-prime素数密度 洛谷p1835

    prime 洛谷p1835 题目描述 给定区间[L, R](L <= R <= 2147483647, R-L <= 1000000),请计算区间中 素数的个数. 输入输出 输入 两 ...

  6. 【题解】NOIP2018 赛道修建

    题目戳我 \(\text{Solution:}\) 根据题目信息简化题意,是让你在树上找出\(m\)条路径使得路径长度最小值最大. 看到题第一感先二分一个答案,问题转化为如何选择一些路径使得它们最小值 ...

  7. [NOIP2018]赛道修建(二分+multiset)

    考场上打了一个 \(vector\) 解法,因为我当时不会 \(multiset\) 好吧,我来讲一讲今年的 \(tgD1T3\) 首先,这题 \(55\) 分是不难想的 1. \(b_i=a_i+1 ...

  8. 【比赛】NOIP2018 赛道修建

    最小值最大,二分长度 然后判断赛道大于等于这个长度最多可以有多少条 可以贪心,对于一个点和它的一些儿子,儿子与儿子之间尽量多配(排序后一大一小),剩下的选个最长的留给自己的父亲就好了 具体实现可以用一 ...

  9. [NOIP2018]赛道修建

    嘟嘟嘟 因为一些知道的人所知道的,不知道的人所不知道的原因,我来改写今年的NOIP了. 现在看这题,心中满是疑问:我当时是多么的zz,这种水题为啥没做出来-- 不管了,说正事. 先考虑部分分. 1.\ ...

  10. P1265 公路修建 洛谷

    https://www.luogu.org/problem/show?pid=1265 题目描述 某国有n个城市,它们互相之间没有公路相通,因此交通十分不便.为解决这一“行路难”的问题,政府决定修建公 ...

随机推荐

  1. win10安装revit失败,怎么强力卸载删除注册表并重新安装

    一些搞设计的朋友在win10系统下安装revit失败或提示已安装,也有时候想重新安装revit的时候会出现本电脑windows系统已安装revit,你要是不留意直接安装revit,只会安装revit的 ...

  2. 千万不要在module里扩展较多逻辑,很容易引起项目异常。

    NOP项目 为保持紧跟NOP更新,项目组坚持不改NOP源码. 以触发器,插件化开发为拓展模式 NOP自定义好的接口或完全独立的新拓展功能很容易插件化. 但部分功能要在NOP原项目上扩展修改在不改源码的 ...

  3. SpringMVC学习笔记八:文件上传及多个文件上传

    SpringMVC实现文件上传需要加入jar包,commons-fileupload-1.3.1.jar,commons-io-2.2.jar 项目目录树: pom.xml加入需要的包 <pro ...

  4. 对String类型的认识以及编译器优化

    Java中String不是基本类型,但是有些时候和基本类型差不多,如String b = "tao" ; 可以对变量直接赋值,而不用 new 一个对象(当然也可以用 new). J ...

  5. 2016年3月13日 FXStreet首席分析师:欧元/美元下周走势展望

    FX168讯 欧元/美元在经历周初沉闷的走势之后,最终在欧洲央行出台一系列措施促进通货膨胀和经济增长之后怒涨至近一个月最高位.欧洲央行决议公布之前,投资者预期存款利率将下调10至15个基点,并可能进一 ...

  6. HashMap底层分析

    以下基于 JDK1.7 分析. 如图所示,HashMap 底层是基于数组和链表实现的.其中有两个重要的参数: 容量 负载因子 容量的默认大小是 16,负载因子是 0.75,当 HashMap 的 si ...

  7. 吴裕雄--天生自然 R语言开发学习:分类

    #-----------------------------------------------------------------------------# # R in Action (2nd e ...

  8. 【内推】平安产险大数据测试开发工程师,15-30k!

    平安产险技术岗内部推荐-大数据测试开发工程师等-欢迎中年人和2020应届生 上班地点:深圳福田平安金融中心 另有大量 上海 北京 成都 广州 岗位 交流qq群 828186629 微信pythonte ...

  9. yii框架通过控制台命令创建定时任务

    假设Yii项目路径为 /home/apps 1. 创建文件 /home/apps/web/protected/commands/console.php $yii = '/home/apps/frame ...

  10. 安卓权威编程指南-笔记(第22章 深入学习intent和任务)

    本章,我们会使用隐式intent创建一个替换android默认启动器的应用.名为NerdLauncher. NerdLauncher应用能列出设备上的其他应用,点选任意列表项会启动相应应用. 1. 解 ...