NOIP 2015 Day2 T3 运输计划(二分+dfs序+树上差分+倍增LCA)

【NOIP2015】运输计划 {二分答案+倍增+树上差分} 【题目描述】 公元 2044 年,人类进入了宇宙纪元。 L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球。 小 P 掌管一家物流公司, 该公司有很多个运输计划,每个运输计划形如:有一艘物流飞船需要从 ui 号星球沿最快的宇航路径飞行到 vi 号星球去。显然,飞船驶过一条航道是需要时间的,对于航道 j,任意飞船驶过它所花费的时 阅读详情

 题目大意:给你一棵n个点的边带权树,再给树上m条路径,让你将一条边权改为0,使得最后路径的最大值最小
 题解:
  1、对于求最大值最小,首先想到二分答案,想了想发现没毛病,怎么验证;
  2、考虑每次找出比当前二分的值大的路径,想将一条他们都经过的边改为0,使得所有边都小于当前二分的值;
  3.于是问题转化为了,求树上路径交,我们可以选择树上差分。
  4、第一次DFS时记录一下每个点的DFS序,因为一棵子树的DFS序是一段连续的区间,方便差分计算。
  5、我们用一条边指向的点来代替它统计(当然也可以在边上计算)—每次求路径交就是在起点,终点++,LCA-=2;最后按DFS序加就好了
  6、优化,我们可以在二分时记录当前值之前有没有算过,如果有,就直接return ,可以用一个数组记录这个答案,减小常数

#include<bits/stdc++.h>
using namespace std;
const int N = 300005;
int n,m,x,y,z,tot,dfs_sort,l,r;
int first[N],to[N*2],nxt[N*2],val[N*2],memery[N];
int deep[N],dis[N],num[N],tmp[N],v[N],f[N][20];
struct node{
    int u,v,lca,len;
    bool operator <(const node&a)const {
        return len>a.len;
    } 
}c[N];

inline int Readint(){
    int i=0;char c;
    for(c=getchar();!isdigit(c);c=getchar());
    for(;isdigit(c);c=getchar()) i=(i<<1)+(i<<3)+c-'0';
    return i;
}

inline void add(int x,int y,int z){
    nxt[++tot]=first[x];first[x]=tot;to[tot]=y;val[tot]=z;
    nxt[++tot]=first[y];first[y]=tot;to[tot]=x;val[tot]=z;
}

inline void Dfs(int x,int fa){
    num[++dfs_sort]=x;//DFS序
    for(int i=1;i<=18;i++){
        f[x][i]=f[f[x][i-1]][i-1];
        if(!f[x][i-1]) break;
    }
    for(int i=first[x];i;i=nxt[i]){
        if(to[i]==fa) continue;
        deep[to[i]]=deep[x]+1;
        dis[to[i]]=dis[x]+val[i];
        v[to[i]]=val[i];//将边的值转到它指向的那个点,方便差分 
        f[to[i]][0]=x;
        Dfs(to[i],x);
    }
}

inline int lca(int a,int b){
    if(deep[a]<deep[b]) swap(a,b);
    int k=deep[a]-deep[b];
    for(int i=18;i>=0;i--)
      if(k&(1<<i)) a=f[a][i];
    if(a==b) return a;
    for(int i=18;i>=0;i--)
      if(f[a][i]!=f[b][i]) a=f[a][i],b=f[b][i];
    return f[a][0];
}

inline bool check(int x){
    int cnt=0,limit=0,mx=0;
    memset(tmp,0,sizeof(tmp));
    for(int i=1;i<=m;i++){
        if(c[i].len>x){
            ++tmp[c[i].u];++tmp[c[i].v];tmp[c[i].lca]-=2;
            limit=max(limit,c[i].len-x);
            cnt++;
        }
        else break;//把边从大到小排序,优化常数
    }
    if(memery[cnt]) return memery[cnt]>=limit;//优化
    if(!cnt) return true;
    for(int i=n;i>=1;i--) tmp[f[num[i]][0]]+=tmp[num[i]];
    //计算一条边经过的次数
    for(int i=2;i<=n;i++)
      if(tmp[i]==cnt) mx=max(mx,v[i]);
    memery[cnt]=mx;
    return memery[cnt]>=limit;
}

int main(){
    //freopen("lx.in","r",stdin);
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    n=Readint(),m=Readint();
    for(int i=1;i<n;i++){
        x=Readint(),y=Readint();
        z=Readint(),add(x,y,z);
        r+=z;
    }
    Dfs(1,0);
    for(int i=1;i<=m;i++){
        c[i].u=Readint();
        c[i].v=Readint();
        c[i].lca=lca(c[i].u,c[i].v);
        c[i].len=dis[c[i].u]+dis[c[i].v]-2*dis[c[i].lca];
    //  r=max(r,c[i].len);
    }
    sort(c+1,c+1+m);
    int ans=r;
    while(l<=r){
        int mid=(l+r)>>1;
        if(check(mid)) ans=min(ans,mid),r=mid-1;
        else l=mid+1;
    }
    cout<<ans;
}
基于Java17、SpringBoot、vue3、antdv-next、uniapp等主流技术构建的全场景极速开发平台 MDP内置3个web端、1个移动端 重点解决用户中心、开发者平台、管理后台3个应 MDP-主数据平台,后端项目。专注于单点登录解决方案。内置用户中心、开发者平台、管理后台3个应用。包含:单点登录、Oauth2 登录、用户身份管理、应用申请、应用接入、主数据维护、主数据订阅、主数据广播、应用接口调用、接口管理管理和查看、系统配置等功能。 立即下载

相关推荐

Win7时间修复(时间错误修复文件)

运行方法:解压后运行reg文件即可。 支持的Win7版本: 1. Windows 7 Starter(入门版 / 初级版) 2. Windows 7 Home Basic(家庭普通版) 3. Windows 7 Home Premium(家庭高级版) 4. Windows 7 Professional(专业版) 5. Windows 7 Enterprise(企业版) 6. Windows 7 Ultimate(旗舰版) 7. Windows 7 Professional for Embedded Systems(嵌入式专业版) 8. Windows 7 Ultimate for Embedded Systems(嵌入式旗舰版)

【NOIP2015提高组】 Day2 T3 运输计划

题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球。 小 P 掌管一家物流公司,该公司有很多个运输计划,每个运输计划形如:有一艘物 流飞船需要从 ui 号星球沿最快的宇航路径飞行到 vi 号星球去。显然,飞船驶过一条航道 是需要时间的,对于航道 j,任意飞船驶过它所花费的时间为 tj,并且任意两艘飞船之 ...

diaoyoutun2652的博客 126

科技中介服务机构想要提升服务效率,需要哪些数智工具支持?.docx

科技中介服务机构想要提升服务效率,需要哪些数智工具支持?

NOIP2015Day2T3-运输计划

二分答案(。。。请耐心等待更新)

Mi-Queen 297

usb 扩容盘检测修复工具源码,编译产物

usb 扩容盘检测修复工具源码,编译产物

融合UWB和IMU割草机定位EKF研究(Matlab代码实现)

内容概要:本文主要介绍了一个名为“Plecs全桥LLC谐振变换器仿真模型”的技术资源,该资源聚焦于电力电子领域中的LLC谐振变换器建模与仿真,涵盖开环、闭环控制、软启动设计及参数优化等核心内容。文档不仅提供了LLC变换器的详细建模方法与仿真案例,还系统梳理了其在高效电源转换系统中的应用,包括隔离型全桥拓扑结构的设计与性能分析。此外,资源汇总了大量Matlab/Simulink仿真模型及相关科研方向,涉及新能源并网、储能控制、电机驱动等多个前沿领域,全面展示LLC谐振变换器在现代电力系统中的关键技术实现路径。同时,文档附带多种学习资料获取途径,如网盘链接和公众号资源,便于研究人员深入实践与拓展研究。; 适合人群:具备扎实的电力电子、自动控制理论基础,从事新能源发电、开关电源设计、电力系统仿真等相关领域的研究生、工程师及科研人员。; 使用场景及目标:①深入理解LLC谐振变换器的工作原理、建模方法与控制策略;②开展电力电子变换器的仿真验证与参数优化设计;③支撑科研项目、学位论文或工程项目的系统仿真与方案验证; 阅读建议:建议结合所提供的仿真模型与参考文献,使用Plecs或Simulink软件进行动手实践,重点掌握LLC谐振变换器的建模流程、闭环控制设计、软启动机制及参数调试技巧,以全面提升在实际工程中的应用与创新能力。

NOIP2015运输计划(二分+dfs序+lca)

嗯不得不说老班的鸡汤就是好喝......期中fighting!

薇小薇 578

基于变频控制的多相交错LLC谐振变换器闭环仿真(Simulink仿真实现)

基于变频控制的多相交错LLC谐振变换器闭环仿真(Simulink仿真实现)内容概要:本文主要介绍了基于Plecs的全桥LLC谐振变换器仿真模型,涵盖变频控制下的多相交错LLC谐振变换器闭环仿真、V2G电动汽车ACDC整流与双向CLLC谐振变换器充放电仿真、LLC谐振变换器的开环与闭环软启动设计,以及储能系统中双向Buck-Boost变换器结合模型预测电流控制和电压下垂控制的仿真研究。同时,文档列举了多种电力电子系统与控制策略的Simulink/Plecs仿真案例,涉及三相交错并联Buck变换器、三电平Buck直流变换器、单相Boost PFC电路等,展示了丰富的电力变换器建模与控制技术。此外,还包括参数设计报告、计算书及相关参考文献,适用于从事电力电子、新能源发电、电动汽车充放电系统等领域的研究人员和技术开发人员。; 适合人群:具备电力电子、自动控制理论基础,从事新能源、电动汽车、电力系统等相关领域研究的研发人员、高校研究生及高年级本科生。; 使用场景及目标:① 学习和掌握LLC谐振变换器及其他典型电力电子变换器的工作原理与建模方法;② 实现闭环控制策略如变频控制、软启动、模型预测控制、下垂控制等的仿真验证;③ 支持科研项目、毕业设计或工程开发中的系统仿真与优化设计。; 阅读建议:建议结合文中提供的仿真模型、设计报告与参考文献,逐步搭建并调试相应系统,重点关注控制策略的实现细节与参数整定过程,以深入理解系统动态响应特性与控制性能。

<考试题> codevs 5440 运输计划 (二分+lca+dfs序+树上差分)

*PS:wzd、dcx与cgold他们组的考试题%%%。。。emmmm,本人太懒qwq,题解也写不明白,大部分抄的考试题解。侵删。 题目描述 Description 公元 2044 年,人类进入了宇宙纪元。L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球。小 P 掌管一家物流公司, 该公司有很多个运输计划,每个运输计划形如:有一艘物流

Loi_Mapleleaf的小池 479

强化学习赋能宇树机器狗:Isaac Gym与MuJoCo仿真训练全解析

本文详细解析了如何利用Isaac Gym和MuJoCo两大仿真平台为宇树机器狗构建强化学习训练管道。内容涵盖环境配置、模型导入、PPO算法框架设计、奖励函数构建以及从仿真到实机的策略迁移技巧,为开发者提供了一套完整的宇树狗仿真训练实践方案。

zeta9的博客 621

EndNote20保姆级安装教程:从下载到汉化一步到位(附闪退解决方案)

本文提供EndNote20的详细安装与汉化教程,涵盖系统准备、分步安装、路径优化及闪退解决方案。针对科研人员的需求,特别优化了中文环境下的使用体验,确保文献管理工具的高效稳定运行。

weixin_30415113的博客 342

《P2680 [NOIP 2015 提高组] 运输计划》

本题要求在一棵带权树中选择一条边变为虫洞(权值降为0),使得所有给定的m条运输路径中的最大路径长度最小化。算法首先预处理LCA和路径长度,然后通过二分查找确定最小可能的最大长度。对于每个候选时间,使用树上差分统计超限路径的公共边,检查是否存在一条边被所有超限路径覆盖且改造后能满足时间要求。时间复杂度为O(n log n + m log n + log T),其中T是路径长度的最大值。

Jasmine_llq的博客 863

Unreal Engine鸿蒙移植实战:环境配置、构建流程与性能优化指南

游戏引擎移植是跨平台开发中的关键技术环节,其核心原理在于通过适配目标操作系统的底层接口和工具链,实现同一套代码在不同硬件和软件环境下的高效运行。这项技术的价值在于最大化代码复用率,降低多平台维护成本,并能让应用快速触达新兴生态系统的用户。在移动游戏和XR应用领域,随着鸿蒙HarmonyOS生态的快速发展,将成熟的商业引擎如Unreal Engine迁移至此平台,成为开发者探索新市场机会的重要路径。本文聚焦于Unreal Engine项目向鸿蒙系统的移植实践,详细解析了从环境搭建、源码适配到构建打包的全链路流

weixin_29011395的博客 411

【NOIP2015提高组Day2】运输计划

按惯例发题…… 分析: 其实题目说那么多,一句话就是:给定一棵带权树与mmm条路径,你可以使一条树上的边的权值变为0,问你mmm条路径的长度的最大值最小是多少。 这道题让我想到了货车运输这道题,但是更难,但方法可以借鉴。 因为这是最大值最小问题,很显然可以二分答案。 那这个二分判断怎么打呢? 我们如果遇到某条边,所有超时的边(即超过当前二分的答案)都经过此边,且最长路径减当前边的权值小于等...

Cass-ette的博客 646

Springboot + vue 实现导出word

Springboot + vue 实现导出word 后端代码 使用word先创建好已知的模板 使用word工具另存为.xml格式的文件 使用freemarker ftl模板 将修改后的xml文件复制到开发工具中,将文件后缀修改为ftl文件,并且将里面的动态值使用${}包裹例如:${zyjn} word工具类 /*** * * Project Name:maventest * <p>生成word工具类<br> * * @ClassName: WordUtil *

qq_45542373的博客 2895

Zemax实战:手把手教你设计一个40倍、NA0.65的显微物镜(附初始结构文件)

本文详细介绍了使用Zemax设计40倍、NA0.65显微物镜的完整流程,从初始结构搭建到优化验证,涵盖光学设计的关键技巧和实战经验。通过分阶段优化策略和公差分析,帮助工程师快速掌握高倍显微物镜的设计方法,提升光学系统性能。

weixin_42525369的博客 344

「NOIP2015提高组Day2T3」运输计划

二分答案+LCA+树上差分

LZX_lzx的博客 251

Python 爬虫实战:爬取知乎问答与评论数据并分析

摘要:本文以Python为核心工具,系统讲解知乎问答与评论数据爬取的技术方案。通过分析知乎API接口结构,详细阐述Requests库结合正则表达式的数据获取方法,涵盖请求头构造、鉴权参数处理等关键技术。文章对比了HTML解析、API调用和Selenium模拟三种爬取方案的优劣,提供完整的代码实现,包括问题信息获取、回答列表爬取和评论数据提取。同时介绍了数据存储(JSON/Excel)和基础文本分析(词云生成)方法,并给出合规使用建议和技术优化方向,为开发者提供了一套可落地的知乎数据爬取与分析解决方案。

2503_91057718的博客 1821

NOIP2015 T6 运输计划 【树上差分】

解题思路:这道题空找一条边不好找,注意到他是使最大的最小,所以不妨考虑二分答案。 设二分的答案为t,则对于每一条len>td的链,必须要修改其上的一条边。如果共要修改m条链,那么修改的那条边一定是这m条链的交集,那么问题就变成了求m条链的交集,看最长减去交集中最长的一条边是否小于t; 那如何求交集呢?可以用树上差分: 设tag[v]表示m条链经过(v,fa[v])这条边的次数,对于每条链(x,

cdsszjj的博客 379

电子电气架构 --- 整车电源管理

保证启动能力:防止因电池电量耗尽而导致的车辆无法启动,这对于确保车辆在任何时候都能可靠运行至关重要。 延长电池寿命:通过避免电池深度放电,有助于延长其使用寿命,减少更换电池的需求和成本。 提升用户体验:虽然负载被关闭可能会暂时影响舒适度,但通过在必要时自动采取行动,可以减少驾驶员的焦虑和不确定性,提高整体的用户满意度。

Soly_kun的博客 1086

LM358模拟声音传感器原理图设计,已量产(声音传感器)

最近在做智能家居设备的声音触发模块时,搭了个基于 LM358 的模拟声音传感器电路 —— 不用复杂的专用芯片,靠通用运放就能把环境声音转化为可被单片机 AD 采集的电压信号,成本压得很低,实际调试下来灵敏度和稳定性都够用。今天把这个电路拆解开,聊聊每部分的设计思路。

不脱发的程序猿 473

NOIP2015DAY2T3【运输计划】

Description 公元 2044 年,人类进入了宇宙纪元。 L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球。 小 P 掌管一家物流公司, 该公司有很多个运输计划,每个运输计划形如:有一艘物流飞船需要从 ui 号星球沿最快的宇航路径飞行到 vi 号星球去。显然,飞船驶过一条航道是需要时间的,对于航道 j,任意飞船

Breathe. 1457

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[NOIp2015] 运输计划

NOIp 2015 D2T3。 洛谷 P2680 传送门 vijos 1983 传送门(vijos交题的人少,不用等) 题里所求的实际上是删掉一条边后所有路径中的最大值。 我们很难直接求出这个最大值的最小值,但是如果给定一个值,可以验证是否合法。 使这个最大值最小,考虑倍增答案。 先求出每个运输计划的长度,倍增答案。 check的时候,数出所有总长大于k的运输计划,显然它们都需要删边...

weixin_30416497的博客 115

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

NOIP2015提高组Day2T3- 运输计划

传送门 Tips 如果两个点的LCA会被反复用到,就可以拿一个数组存下来,避免反复计算 Analysis 又是一道好喵喵喵妙的题啊!!!树上差分太棒了,简直太厉害 不过首先我们得看出来这是一道二分可以解决的问题 然后问题就变成了怎么check 看看gsj大佬怎么说吧 Code 注意常数因子带来的程序效率上的影响。 所以树链剖分貌似要快得多 但……hhh,写的倍增 #include&lt;bi...

Faithfully-xly的博客 277

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

DAY5测试T2 Tree(LCA+线段树/树上差分)

【问题描述】 小s是A星球的霸主。A星球上有n个城市,城市之间有一些道路。小s发现城市和道路刚好组成了一棵树。并且他发现如果有任意一条道路损坏,城市和城市之间就不连通了。A星球上还有m对工作站(A, B)。每对工作站在工作的时候,需要人员从A城市走到B城市。 现在A星球有Q个任务,每个任务可以由第L对工作站到第R对工作站任意一个来完成。小s想知道对于每个任务,损坏了哪些边会导致...

二三两 602

Noip往年题目整理

Noip往年题目整理 fastle 一.历年题目 按时间倒序排序 年份 T1知识点 T2知识点 T3知识点 得分 总体 2016day1 模拟 Lca,树上差分 期望dp 144 挺难的一套题目,偏思维难度,代码实现到没有多麻烦除了一个很长的转移方程 ...

weixin_30843605的博客 628
上一篇: NOIP2017赛前模拟(2017.10.19)
下一篇: NOIP2017赛前模拟(2017.10.20)Matrix (类似轮廓线DP)
Amessal
博客等级 码龄10年 9粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值