题解:

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

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

所以线段树维护一下区间加减取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. 详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解

    转载声明:本文为转载文章,发表于nebulaf91的csdn博客.欢迎转载,但请务必保留本信息,注明文章出处. 原文作者: nebulaf91 原文原始地址:http://blog.csdn.net/ ...

  2. python学习笔记之元祖

    #元祖 只读列表,可循环查询,可切片.#儿子不能改,孙子可能可以改. tu = (1,2,3,'alex',[2,3,4,'taibai'],'egon') print(tu[3]) print(tu ...

  3. Apache Hadoop 2.9.2 的YARN High Available 模式部署

    Apache Hadoop 2.9.2 的YARN High Available 模式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.环境准备 1>.官方文档(htt ...

  4. 浅议极大似然估计(MLE)背后的思想原理

    1. 概率思想与归纳思想 0x1:归纳推理思想 所谓归纳推理思想,即是由某类事物的部分对象具有某些特征,推出该类事物的全部对象都具有这些特征的推理.抽象地来说,由个别事实概括出一般结论的推理称为归纳推 ...

  5. Python——各类库的安装(持续更新)

    一.BeautifulSoup 说明:www.crummy.com:Beautiful Soup 3只能在python2.x版本中运行,而Beautiful Soup 4还可以在python3.x版本 ...

  6. java校验字符串是否为json格式

    觉得挺好玩的一个问题,如何校验字符串是否为标准的json格式,刚开始的回答是jsonObject或者jsonArray转换一下,如果可以转换,说明为json字符串,如果不能就抛出异常,捕获异常. 但是 ...

  7. 《模式分类(原书第二版)》pdf格式下载电子书免费下载

    <模式分类(原书第二版)>pdf格式下载电子书免费下载: https://u253469.ctfile.com/fs/253469-302448505 内容简介 <模式分类>( ...

  8. 【转】Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  9. 提高MYSQL大数据量查询的速度

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  10. C# 创建Web项目时 可以选择的类型在不同VS版本下的对比

    上面这个界面应该是 vs2010的 一. VS2012 .VS2013 其实每个模板的意思,在右边已经显示出来了.Empty,就是一个空的模板,创建后里面除了一个web.config外什么都没有:We ...