B. Fake Plastic Trees(贪心+dp)

简介: B. Fake Plastic Trees(贪心+dp)

题目

(Fake Plastic Trees)[codeforces.com/problemset/…]

题意

输入 T(≤1e3) 表示 T 组数据。所有数据的 n 之和 ≤2e5。 每组数据输入 n(2≤n≤2e5) 表示一棵 n 个节点的树,编号从 1 开始,1 为根节点。 然后输入 p[2],p[3],...,p[n],其中 p[i] 表示 i 的父节点。 然后输入 n 行,其中第 i 行输入两个数 l 和 r,表示第 i 个节点值的目标范围 [l,r]。

初始时,所有节点值均为 0。 每次操作你可以选择一条从 1 开始的路径,把路径上的每个节点值都加上一个数。要求这些数按照路径的顺序,形成一个递增序列。(可以相等,可以等于 0,例如 [0,0,1,3,3]) 要使所有节点值都在对应的范围内,至少要操作多少次?

思路

先满足叶子节点,这样肯定是最优的。

在满足叶子的情况下,因为是非递减序列,所以让序列尽量大也是最优的

设dp[u]为操作数最少的情况下,满足子树后,u节点能得到的最大权重。

dp[u]=min(∑u子节点vdp[v],R[u])dp[u] = min(\sum_{u子节点v} dp[v],R[u])dp[u]=min(u子节点vdp[v],R[u])

代码

cpp

复制代码

const int N = 2e5+10;
vector<int> p[N];
int L[N],R[N];
int ans = 0;
LL dfs(int u)
{
    LL sum = 0;
    for(auto v:p[u])
    {
        sum += dfs(v);
    }
    if (sum < L[u])sum = R[u],ans ++;
    return min(sum,1LL*R[u]);
}
void solve()
{
    ans = 0;
    int n;cin >> n;
    for(int i = 1;i <= n;i ++)p[i].clear();
    for(int i = 2;i <= n;i ++){
        int t;cin >> t;
        p[t].push_back(i);
    }
    for(int i = 1;i <= n;i ++)cin >> L[i] >> R[i];
    dfs(1);
    cout << ans << endl;
}
相关文章
|
存储 C++ UED
【实战指南】4步实现C++插件化编程,轻松实现功能定制与扩展
本文介绍了如何通过四步实现C++插件化编程,实现功能定制与扩展。主要内容包括引言、概述、需求分析、设计方案、详细设计、验证和总结。通过动态加载功能模块,实现软件的高度灵活性和可扩展性,支持快速定制和市场变化响应。具体步骤涉及配置文件构建、模块编译、动态库入口实现和主程序加载。验证部分展示了模块加载成功的日志和配置信息。总结中强调了插件化编程的优势及其在多个方面的应用。
1191 171
|
安全 网络协议 网络安全
【Python】已解决:pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool (host=’ files. pyth
【Python】已解决:pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool (host=’ files. pyth
2012 0
|
并行计算 编译器 程序员
提升C/C++编程效率:深入C/C++ for循环的优化与应用
提升C/C++编程效率:深入C/C++ for循环的优化与应用
1800 0
|
算法 安全 数据安全/隐私保护
C/C++学习 -- 分组加密算法(DES算法)
C/C++学习 -- 分组加密算法(DES算法)
669 0
|
人工智能 Windows
CF834D. The Bakery(线段树优化dp 决策单调性优化dp)
CF834D. The Bakery(线段树优化dp 决策单调性优化dp)
222 0
CF834D. The Bakery(线段树优化dp 决策单调性优化dp)
|
Python
一分钟学Python| Python的函数(上)
一分钟学Python| Python的函数(上)
171 0
|
前端开发 安全 Java
找了半天还是不知道怎么选直播代码,来这里全告诉你
如今是直播行业的鼎盛期,带我们走进了直播+的时代,直播代码开发的直播平台基本上研发的用户需求多元化,不过开发一个新的、定制的直播室APP开发设计费时费力,而且通常企业的源代码都是打包的,所以原始生态开源系统的直播系统源代码是较佳选择,那么我们该如何正确选择视频直播源码不被坑呢?
找了半天还是不知道怎么选直播代码,来这里全告诉你
|
Java 数据库连接 数据库
《Spring Boot开发:从0到1》大纲结构
《Spring Boot开发:从0到1》 大纲结构v2.0 第一部分Spring Boot基础 第1章 Spring Boot史前简述 1.1 J2EE(Java 2 Platform Enterprise Edition)简介 1.
3578 0