题解:

正解做法比较简单,考虑离线之后,相邻两个节点之间的答案是有关系的

发现从父亲移到儿子后,改变的距离对于当前节点子树内和子树外的是一样的

所以线段树维护一下区间加减取max就可以了

另外的做法1:

过不了,考虑分块

对连续的叶子分成一个块,维护每个点到这个点的距离,可以多源最短路nlogn

然后查询的时候零散的要查找两个点之间的距离,这个可以O(1)rmq

所以块大小设成$\sqrt{nlogn}$是$q\sqrt{nlogn}$

理论复杂度1.5e9。。。别想过了

做法2:

这个做法可以在线(正解可持久化一下当然也可以),比正解麻烦

考虑询问一个点x,那么它儿子内的点我们只需要查到根距离最短的就可以了

然后我们去考虑枚举叶子和当前点的$lca$,这时候我们发现我们只需要查找离$lca$最近的那个点就行了

但是$lca$暴力枚举只有在树是随机的情况下才是对的

我们把距离写成$dis[x]-dis[lca]+dis2[lca]$ 其中$dis$表示到根距离,$dis2$表示子树中到它的最短距离

如果我们知道$dis2$我们就可以维护了

我们把问题按照$dfs$序和$x$的$dfs$序的大小关系分成两类

以小于为例

令$dis2[lca]$为$lca$子树内$dfs$序小于$dfs[x]$到$lca$的最短距离

那么我们会发现,对于$x$连续的一段祖先,我们考虑它就是考虑$dis2$

会发现对于不同节点,查询同一个节点$k$的$dis2[k]$是不同的

所以我们用$dis2[k]$记录原本应该$dis2[fa[k]]$记录的东西,那么就唯一了

倍增维护

直到$lca(第一个叶子,x)$这个节点可能是不完整的

所以要特殊查一下

查的话可以可持久化线段树合并维护一下每个点子树内dfs为k的值,然后区间查询就可以了

起始位置如果没有包含所有比$dfs[x]$小的节点也要特殊查一下

大于同理

最后复杂度还是$nlogn$的

codeforces 1110F的更多相关文章

  1. Codeforces.1110F.Nearest Leaf(线段树)

    题目链接 \(dls\)讲过这道题,所以这不是线段树裸题吗,这场没打气气气气气=-= 现在是写着玩=v= \(Description\) 给定一棵\(n\)个点的树.\(q\)次询问,每次询问给定\( ...

  2. CodeForces 1110F Nearest Leaf | 线段树/换根

    我--又诈尸了-- 代码几乎都不会写了,打场CF居然上分啦,开心!(虽然还是比不过列表里的各路神仙) 题目链接 题目描述 一棵\(n\)个点的有根树,规定一种dfs序(规则:编号小的点优先dfs),\ ...

  3. Codeforces 1110F(DFS序+线段树)

    题面 传送门 分析 next_id = 1 id = array of length n filled with -1 visited = array of length n filled with ...

  4. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  5. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  6. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  7. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  8. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  9. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

随机推荐

  1. SQL Server数据库中表的查

    DataSet 数据集 DataAdapter 数据适配器,DataSet对象与实际数据源之间的桥梁,自动开闭数据库连接,省略Open.Close.填充数据集,需要用到Fill方法. using Sy ...

  2. CentOS7设置ssh服务以及端口修改

    很多时候我们都是通过SSH 服务 来对 Linux 进行操作,而不是直接来操作Linux机器,包括对Linux服务器的操作,因此,设置SSH服务对于学习Linux来说属于必备技能(尤其是运维人员),关 ...

  3. VS.NET C# 开发ArcGis插件无法进入断点调试的解决方法

    有人问起,想起来码到这儿,再有人问可以直接给链接参考. 以10.1为例,因为博主一直用的它,所以只能是这个例.其他版本如有不同,那就不同吧. 首先,得确认调试时启动了外部程序 在项目属性→调试→启动外 ...

  4. 六十、linux 编程—— I/O 多路复用 select

    60.1 介绍 60.2 例子 echo_tcp_server_select.c #include <netdb.h> #include <netinet/in.h> #inc ...

  5. Java中方法定义和调用的学习

    方法其实就是若干语句的功能集合. 参数(原料):就是进入方法的数据.返回值(原产物):就是从方法中出来的数据. 定义方法的完整格式:修饰符  返回值类型  方法名称(参数类型 参数名称,...){ 方 ...

  6. 第31月第15天 -fembed-bitcode

    1. 确保打包的时候使用的是fembed-bitcode, 而不是fembed-bitcode-maker fembed-bitcode-maker:只是简单的标记一下在archive出来的二进制中b ...

  7. PLSQL DEVELOPER编辑器的自动替换文件

    PLSQL DEVELOPER的编辑器的自动替换文件: s=Select * From w=Where ins=Insert Into sc=Select Count(*) From pb=Parti ...

  8. 【转】Python函数默认参数陷阱

    [转]Python函数默认参数陷阱 阅读目录 可变对象与不可变对象 函数默认参数陷阱 默认参数原理 避免 修饰器方法 扩展 参考 请看如下一段程序: def extend_list(v, li=[]) ...

  9. quart-process_bar

    import asyncio import random import aioredis import redis from quart import Quart, request, url_for, ...

  10. Mock.js简易教程,脱离后端独立开发,实现增删改查功能(转)

    在我们的生产实际中,后端的接口往往是较晚才会出来,并且还要写接口文档,于是我们的前端的许多开发都要等到接口给我们才能进行,这样对于我们前端来说显得十分的被动,于是有没有可以制造假数据来模拟后端接口呢, ...