2023CSPS 种树 —— 二分+前缀和

news2024/12/23 13:00:47

This way

题意:

    一开始以为是水题,敲了一个二分+贪心检查的代码,20分。发现从根往某个节点x走的时候,一路走来的子树上的节点到已栽树的节点的距离会变短,那么并不能按照初始情况贪心。
    于是就想着检查时候用线段树,存的是(每个节点最晚开始时间-它距离最近栽树的点的距离)往后就将这个称为ddl。每一步都往当前最小值的位置走,每走一步,将当前这一步的子树区间+1,如此往复。当走到一个点发现已经走的步数>这个点最晚开始时间时候就是not。但是代码过于繁杂,最终放弃了这样思路,而且常数可能会比较大,最终如果TLE了血亏。
    首先这道题的答案满足二分的性质,考虑使用二分。二分出来结束时间的时候,我们可以求出每个点的最晚到达时间,首先分c>=0和c<0两种情况。对于c<0的时候又要分三种情况。其实就是等差数列求和公式,但是注意会爆longlong,所以转乘为除。我这里使用二分去找答案,当然直接算好像也行?
    发现其实每个点的ddl就是它子树的ddl最小值,也就是每个点的ddl可视为子树中最小ddl-当前点到ddl最小的节点的距离,例如:
在这里插入图片描述
假设点1的最晚开始时间是第10天,点2是第3天,点3是第50天,点4是第90天,点5是第4天。那么转换过来,其实它们真实的ddl如下:
在这里插入图片描述
    这个时候我们只需要将所有真·ddl存到桶里面,再做一个前缀和,记为num[i]。若i<num[i],则表示你走了i步,但是有超过i个点的ddl在i步之内(我们在上图处理完之后,所有链上的ddl必然是递增的也就是如果点x需要走10步,那father[x]最大为9,father[father[x]]最大为8,也就是为x做铺垫),那么表示无法在i步内满足num[i]个点的ddl。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+5;
ll a[N],b[N],c[N],en[N],e,shou,mo;
int n,x,y,dep[N],u,tim,num[N],t[N];
vector<int>vec[N];
bool vis[N];
#define pii pair<int,int>
vector<pii>day;
int dfs(int x,int fa){
    for(int ne:vec[x]){
        if(ne==fa)continue;
        t[x]=min(t[x],dfs(ne,x)-1);
    }
    num[t[x]]++;
    return t[x];
}
bool check(ll d){
    day.clear();
    memset(num,0,sizeof num);
    for(int i=1;i<=n;i++){
        ll l=1,r=min(1ll*n,d);t[i]=-1;
        while(l<=r){
            ll x=l+r>>1;
            if(c[i]>=0){
                if((a[i]*2ll+d-x)/(d-x+1)<=2*b[i]+(x+d)*c[i])t[i]=x,l=x+1;
                else r=x-1;
            }
            else{
                c[i]=-c[i];
                if(en[i]<=x){
                    if(a[i]<=d-x+1)t[i]=x,l=x+1;
                    else r=x-1;
                }
                else if(en[i]<=d){
                    e=en[i]-1;
                    shou=b[i]-x*c[i],mo=b[i]-e*c[i];
                    if((2*a[i]-2*(d-e)+e-x)/(e-x+1)<=(shou+mo))t[i]=x,l=x+1;
                    else r=x-1;
                }
                else{
                    ll shou=b[i]-x*c[i],mo=b[i]-d*c[i];
                    if((2*a[i]+d-x)/(d-x+1)<=(shou+mo))t[i]=x,l=x+1;
                    else r=x-1;
                }
                c[i]=-c[i];
            }
        }
        if(t[i]-dep[i]<=0)return 0;
    }
    dfs(1,0);
    for(int i=1;i<=n;i++){
        num[i]+=num[i-1];
        if(num[i]>i)
            return 0;
    }
    return 1;
}
int main()
{
    ll l=n,r=0,ans=-1;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%lld%lld%lld",&a[i],&b[i],&c[i]);
        r=max(r,a[i]);
        if(c[i]<0)
            en[i]=(b[i]-c[i]-1)/(-c[i]);
    }
    r=min(r,1000000000ll);
    for(int i=1;i<n;i++){
        scanf("%d%d",&x,&y);
        vec[x].push_back(y),vec[y].push_back(x);
    }
    while(l<=r){
        ll mid=l+r>>1;
        if(check(mid))r=mid-1,ans=mid;
        else l=mid+1;
    }
    printf("%lld\n",ans);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1126306.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023-1024‍节日(内含表白代码)

文章目录 一、前言二、代码实现三、动态展示四、总结 一、前言 1024可以是计算机操作系统的进制单位&#xff0c;也可以是&#x1f9d1;‍&#x1f4bb;程序员们的特殊纪念日。 每年10月24日被行业认定为“程序员节”。 今天&#xff0c;正是一年一度的“1024程序员节”在此纪…

LeetCode讲解篇之面试题 01.08. 零矩阵

文章目录 题目描述题解思路题解代码 题目描述 题解思路 遍历矩阵&#xff0c;若当前元素为零&#xff0c;则将该行和该列的第一个元素置零 遍历第一行&#xff0c;若当前元素为零&#xff0c;则将当前列置零 遍历第一列&#xff0c;若当前元素为零&#xff0c;则将当前行置零 …

Kong:高性能、插件化的云原生 API 网关 | 开源日报 No.62

Kong/kong Stars: 35.2k License: Apache-2.0 Kong 是一款云原生、平台无关且可扩展的 API 网关。它以高性能和插件化的方式脱颖而出&#xff0c;提供了代理、路由、负载均衡、健康检查和认证等功能&#xff0c;并成为编排微服务或传统 API 流量的中心层。 以下是 Kong 的核心…

浏览器面试题及答案【集合目录】

前言&#xff1a; 欢迎浏览和关注本专栏《 前端就业宝典 》&#xff0c; 不管是扭螺丝还是造火箭&#xff0c; 多学点知识总没错。 这个专栏是扭螺丝之上要造火箭级别的知识&#xff0c;会给前端工作学习的小伙伴带来意想不到的帮助。 本专栏将前端知识拆整为零&#xff0c;主要…

kr第三阶段(二)32 位汇编

编译与链接 环境配置 masm32 masm32 是微软的 masm32 的民间工具集合。该工具集合除了 asm32 本身的汇编器 ml 外还提供了&#xff1a; SDK 对应的函数声明头文件和 lib 库。32 位版本的 link&#xff08;原版本是 16 位&#xff0c;这里的 32 位版本的 link 来自 VC 6.0&a…

IDEA工具第二篇:自定义Java方法注释模板 | 京东云技术团队

网上搜索类似的文章有很多&#xff0c;但是一味的复制粘贴总会出现各种奇葩问题&#xff0c;最后然并卵&#xff01;今天特意自己研究琢磨一下&#xff0c;将最终结果分享给大家&#xff0c;100%亲测可用。 一、说明 想必大家都用过Eclipse的方法注释生成&#xff0c;方法上输…

Django结合Celery进行异步调用

目录 Celery介绍 相关环境 相关配置 1、在proj/proj/目录下创建一个新的celery.py模块 定义 Celery 实例&#xff1a; 2、在proj/proj/__init__.py 模块中导入这个应用程序。 3、在各自模块中定义任务文件tasks.py 4、settings.py配置 服务启动 异步调用 Celery介绍 C…

ChatGPT AIGC 办公自动化拆分Excel工作表

在职场办公中对数据的操作,经常需要将一份表格数据拆分成多个表。 但是在Excel中进行表格拆分的步骤比较多。 在Excel中拆分工作表的步骤: 1.打开您的Excel工作簿,选择您要拆分的工作表。 2.右键单击工作表标签(通常在底部),选择“移动或复制”。 3.在“移动或复制”…

SpringCloud和Kubernetes的区别

又见小道仙&#xff1a; https://blog.csdn.net/Tomwildboar/article/details/129531315 对于SpringCloud在实际项目中并未使用过&#xff0c;只是自学过SpringCloud和SpringCloud Alibaba&#xff0c;也基于学习搭建过demo。 对于Kubernetes&#xff0c;目前这家公司就是使用…

SpringBoot引入包报红,无法使用Maven依赖

今天又是一年一度的程序员节&#xff0c;希望各位编码的小伙伴们能够健健康康&#xff0c;开开心心。 最近弄了一个SpringBoot项目&#xff0c;今天拉取代码的时候发现文件都变成了这样子 平时常用的依赖包都用不了了&#xff0c;重新加载&#xff0c;重新install都无效&#…

浏览器标签上添加icon图标;html引用ico文件

实例 <link rel"shortcut icon" href"./XXX.ico" type"image/x-icon">页面和图标在同一目录内 则 <link rel"shortcut icon" type"text/css" href"study.ico"/>可以阿里矢量图库关键字搜索下载自己…

【tg】9 : InstanceImpl 、 虚拟的音频渲染设备FakeAudioDeviceModuleImpl

代码分布 WebRTC-Manager 线程:manager线程 G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\InstanceImpl.h Manager 使用的是 WebRTC-Manager 线程 InstanceImpl 对Manager 的封装和调用 #

【ESP-BOX-LITE】:照片查看器

目录 项目场景&#xff1a; 项目需求描述&#xff1a; 项目技术&#xff1a; 项目成果&#xff1a; 项目总结&#xff1a; 项目视频&#xff1a; 芳香 项目场景&#xff1a; 使用ESP-BOX-LITE实现照片查看器功能&#xff0c;显示多级目录下的图片或文件夹&#xff0c;自…

Mac风扇控制电脑降温软件Macs Fan Control Pro 简体中文

Macs Fan Control Pro是一款功能强大的Mac风扇控制软件&#xff0c;旨在帮助用户更好地管理和控制Mac电脑的风扇速度和温度传感器。以下是该软件的主要特色介绍&#xff1a; 监测和调整Mac电脑的风扇速度和温度传感器&#xff0c;帮助用户控制设备温度&#xff0c;提高电脑性能…

浅谈RabbitMQ的延迟队列

Part 01、 延迟队列是什么 延迟队列代表了一种强大的消息传递机制&#xff0c;允许我们在将消息发送至RabbitMQ时&#xff0c;规定它们只能在未来某个预定的时间点被消费。这种特殊类型的消息被简称为"延迟消息"。 以RabbitMQ为例&#xff0c;它允许我们通过延迟…

【LeetCode:637. 二叉树的层平均值 | bfs】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

用nodejs爬虫台湾痞客邦相册

情景:是这样的,我想保存一些喜欢的小伙伴的照片,一张张保存太慢了, 所以我写了个js,放在国外服务器爬,国内的自己解决~ 使用方法 1.点相册随便一张, 复制url, 这张开始接下来的图片都会保存 /*** 2023年10月23日 22:58:44* 支持解析痞客邦相册* 只需要复制相册第一张图片的ur…

uni-app:多种方法写入图片路径

一、文件在前端文件夹中 1、相对路径引用 从当前文件所在位置开始寻找图片文件的路径。../../ 表示返回两级目录&#xff0c;即从当前文件所在的 wind.vue 所在的位置开始向上回退两级。接着&#xff0c;进入 static 目录&#xff0c;再进入 look 目录&#xff0c;最后定位到 …

如何提高决策能力?目标导向是关键

决策能力是一项综合性较强的素质&#xff0c;有信息收集&#xff0c;信息加工处理到信息输出&#xff0c;形成判断和选择的能力。决策能力不仅仅是指职场领导者的决策能力&#xff0c;其实在日常生活中同样需要决策能力&#xff0c;简单的理解就是信息分析&#xff0c;判断和选…

计算机毕设 大数据二手房数据爬取与分析可视化 -python 数据分析 可视化

# 1 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通…