首页 > 其他分享 >B. Fake Plastic Trees(贪心+dp)

B. Fake Plastic Trees(贪心+dp)

时间:2023-05-18 17:45:54浏览次数:46  
标签:int sum Trees Plastic 节点 dp

题目

(Fake Plastic Trees)[https://codeforces.com/problemset/problem/1693/B]

题意

输入 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(\sum_{u子节点v} dp[v],R[u]) \]

代码

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;

}


标签:int,sum,Trees,Plastic,节点,dp
From: https://www.cnblogs.com/cfddfc/p/17412622.html

相关文章

  • 使用bandpass Butterworth filter对信号数据进行滤波去噪
    在信号处理中,有些信号会包含大量的噪声,需要用一些滤波器去噪,本文介绍使用bandpassButterworthfilter进行去噪。直接使用sciPypython库可以实现噪声滤波步骤1:导入所需python模块fromscipy.signalimportfiltfiltfromscipyimportstatsimportCSVimportpandasaspdim......
  • 概述 .NET ThreadPool 实现
    基本调度单元IThreadPoolWorkItem实现类的实例。Task全局队列本地队列偷窃机制线程注入实验.NET5实验一默认线程池配置.NET5实验二调整ThreadPool设置.NET5实验三tcs.Task.Wait()改为Thread.Sleep.NET6实验一默认ThreadPoo......
  • 单调队列优化dp
    单调队列优化dp对于一些比较简单的题目,我们可以直接凭借经验进行优化。但是对于类似\(max(f[j-kw]+kv)\)(多重背包)我们就很难凭借经验找到优化方式了这个时候,我们就可以尝试一下下面的方法:我们观察一些简单的,可以单调队列优化的方程,他们都有这样的形式:\(max/min(g[i-k])(L\l......
  • kube-proxy修改日志级别并观察endpoint变化
    k8sv1.15.0修改日志级别keditdskube-proxy-nkube-system增加kube-system命名空间下corednsPodkgetendpointskube-dns-nkube-system-oyaml持续输出kube-proxy日志dockerlogs-f`dockerps|grepkube-proxy|grep-vpause|awk'{print$1}'`pkg/prox......
  • MATLAB仿真8DPSK信号在AWGN信道下的误码率分析 商品形式:程序 实现功能
    MATLAB仿真8DPSK信号在AWGN信道下的误码率分析商品形式:程序实现功能:MATLAB仿真8DPSK信号在AWGN信道下的误码率与误比特率分析,与理论值进行比较。ID:6250644391639967......
  • STM32F107单片机驱动Dp83848以太网芯片程序 项目开发用到了Dp83848
    STM32F107单片机驱动Dp83848以太网芯片程序项目开发用到了Dp83848这一个以太网芯片,本人发现其配置起来比较麻烦,所以整理了一份STM32F107单片机驱动Dp83848的程序代码例程,方便大家学习相关代码的配置ID:3821630931468138......
  • ThreadPoolTaskExecutor与ThreadPoolExecutor的区别及优缺点
    ThreadPoolTaskExecutor和ThreadPoolExecutor都是线程池的实现,但它们有以下几点区别:1.ThreadPoolTaskExecutor是Spring框架中编写的,它对ThreadPoolExecutor进行了封装,提供了更加丰富的功能,更易于在Spring中使用。而ThreadPoolExecutor是JDK中的实现。2.ThreadPoolTaskExe......
  • wordpress 优化备份还原插件duplicator-pro-4_5_3_2的使用填坑
     创建备份我这边没有出错,就不说了 插件下载地址:https://www.wpjzb.com/wp-plugins/duplicator-pro/我是应的是  https://pan.baidu.com/share/init?surl=YRss-vqBVY2Twv1tBid9fQ   提取码:ibnshttps://pan.baidu.com/share/init?surl=6VSX3FUlugtfBfTPj4wLbg 提取......
  • dpkg命令用法、Ubuntu下deb包的解压、打包、安装、卸载及常用命令参数
    dpkg命令的用法不带图简装:https://blog.csdn.net/wanghuohuo13/article/details/78916821?ops_request_misc=&request_id=&biz_id=102&utm_term=dpkg&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-6-.first_rank_v2_pc_rank_v29&am......
  • IDP 与 DevOps平台:相似之处与关键差异
    软件开发是一个复杂而动态的过程,涉及许多工具、技术和实践。为了更快、更好地交付软件,开发人员需要有效地协作,自动执行任务,并管理环境。然而,由于软件架构的日益复杂,工具和平台的多样性,以及对安全和合规性的要求越来越高,软件开发变得极具挑战。 为了更好地应对开发挑战,企业根据......