[CSP-S 2023] 种树 —— 二分+前缀和

news2024/9/21 0:35:20

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/1122932.html

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

相关文章

Notepad++正则查询替换操作

Notepad编辑器查找功能非常强大&#xff0c;本处记录一些实战中常用到复杂查询替换操作。 注意&#xff1a;如果是重要文件&#xff0c;替换操作前最好备份&#xff1b;当前一个操作后也可以用ctrlz恢复。 查找重复行 用查找(ctrlf)功能&#xff0c;用正则表达式模式匹配。 查…

基于SSM的电子设备销售网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

C# Onnx Yolov8 Detect 戴安全帽检测

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace Onnx…

基于SSM的图书商城网站设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

面试题:说一下Redis中有哪些阻塞点以及如何解决?

文章目录 前言有哪些影响redis性能的因素客户端的阻塞磁盘带来的阻塞主从节点带来的阻塞切片集群的阻塞异步机制解决阻塞异步是如何进行的异步删除lazy-free小结 Redis 中的优秀设计有很多&#xff0c;今天我们一起来聊聊群友刷题遇到的&#xff1a;“Redis的异步机制 —— red…

网络协议--动态选路协议

10.1 引言 在前面各章中&#xff0c;我们讨论了静态选路。在配置接口时&#xff0c;以默认方式生成路由表项&#xff08;对于直接连接的接口&#xff09;&#xff0c;并通过route命令增加表项&#xff08;通常从系统自引导程序文件&#xff09;&#xff0c;或是通过ICMP重定向…

[SQL开发笔记]SELECT DISTINCT语句:返回唯一不同的值

一、功能描述&#xff1a; 使用场景&#xff1a;在表中&#xff0c;一个列可能会包含多个重复值&#xff0c;希望仅仅列出不同&#xff08;distinct&#xff09;的值&#xff0c;我们需要怎么办呢&#xff1f;可以SELECT DISTINCT语句用于返回唯一不同的值 二、SELECT Distinc…

【Unity ShaderGraph】| 快速制作一个 钛金化不锈钢效果

前言 本文将使用ShaderGraph制作一个 钛金化不锈钢 效果&#xff0c;可以直接拿到项目中使用。对ShaderGraph还不了解的小伙伴可以参考这篇文章&#xff1a;【Unity ShaderGraph】| Shader Graph入门介绍 | 简介 | 配置环境 | 窗口介绍 | 简单案例下面就开始看一下具体的制作流…

多元高斯分布全解析

大纲 公式推导参数估计高斯分布运算高斯分布性质高斯过程&#xff08;Gaussian process&#xff09; 概念区分 边缘分布(marginal distribution)和联合分布概率密度函数和概率分布函数 1. 多元高斯分布公式推导 首先我们知道一元高斯分布是&#xff1a; N ( x ∣ u , σ 2…

2023年【北京市安全员-B证】考试试卷及北京市安全员-B证模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 北京市安全员-B证考试试卷考前必练&#xff01;安全生产模拟考试一点通每个月更新北京市安全员-B证模拟考试题题目及答案&#xff01;多做几遍&#xff0c;其实通过北京市安全员-B证在线考试很简单。 1、【多选题】《…

轻松合并Excel工作表:Java批量操作优化技巧

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 在Excel中设计表单时&#xff0c;我们经常需要对收集的信息进行统计分析。例如&a…

web自动化测试——跨平台设备管理方案Selenium Grid

跨平台设备管理方案Selenium Grid 一、Selenium Grid简介二、使用场景场景一&#xff1a; 实现分布式执行测试&#xff0c;提高执行效率场景二&#xff1a; 解决浏览器兼容性问题新特性 三、Selenium Grid4原理分析四、环境安装五、运行方式&#xff1a;单机运行 - 独立模式1. …

SpringCloud之OpenFeign调用解读

目录 基本介绍 引进 OpenFeign概述 OpenFeign作用 FeignClient EnableFeignClients Java代码实战 实战架构 父工程pom文件 teacher-service服务 student-service服务 测试 自定义配置 基本介绍 引进 如果我们利用RestTemplate发起远程调用的代码时会存在一些…

docker部署nginx并设置挂载

前言&#xff1a; 最近在学习docker和nginx&#xff0c;因为容器在运行过程中&#xff0c;相关的配置文件及日志都会存在容器内。对容器以来较高&#xff0c;当容器不存在的时候。所有的文件也就都没有了。并且当需要查看日志&#xff0c;修改配置文件的时候必须进入到容器内部…

JavaWeb配置Servle

在Java Web开发中&#xff0c;数据流主要遵循以下流程&#xff1a; 用户在浏览器中输入URL或点击链接&#xff0c;发送HTTP请求到服务器。服务器接收到请求后&#xff0c;根据请求的URL找到对应的Servlet。Servlet处理请求&#xff0c;可能需要查询数据库或执行其他业务逻辑。…

Docker笔记-docker搭建nginx及移植

从官网找到对应的镜像&#xff1a; ​​​​​​https://hub.docker.com/_/nginx/tags 查看镜像 docker images 运行容器&#xff0c;然后将配置文件等拷贝到主机上&#xff1a; docker run --name nginx -d nginx 拷贝路径&#xff1a; docker cp nginx:/etc/nginx/nginx…

[SQL开发笔记]SELECT 语句:读取数据表的信息

一、功能描述&#xff1a; 用于从数据库中读取数据 二、SELECT语法详解&#xff1a; 1&#xff09;查询整个表的信息&#xff1a; SELECT * FROM table_name; 2&#xff09;查询表中的字段或多个字段&#xff1a; SELECT column1, column2, ...FROM table_name; 参数说明…

面试中被问到:Netty中的零拷贝机制是怎么样的?

零拷贝(Zero-copy), CPU不需要为数据在内存之间的拷贝消耗资源。而它通常是指计算机在网络上发送文件时&#xff0c;不需要将文件内容拷贝到用户空间&#xff08;User Space&#xff09;而直接在内核空间&#xff08;Kernel Space&#xff09;中传输到网络的方式。Zero Copy的模…

雪数据同化系统Snow Data Assimilation System数据集

雪数据同化系统&#xff08;SNODAS&#xff09; 雪资料同化系统&#xff08;SNODAS&#xff09;是国家水文遥感业务中心&#xff08;NOHRSC&#xff09;精心开发的综合建模和资料同化系统。其主要目标是提供高度准确的积雪和相关参数估计&#xff0c;作为水文建模和分析的重要…

分类预测 | MATLAB实现SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络数据分类预测

分类预测 | MATLAB实现SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络数据分类预测 目录 分类预测 | MATLAB实现SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现SSA-CNN-BiLSTM数据…