codeforces 1110F
题解:
正解做法比较简单,考虑离线之后,相邻两个节点之间的答案是有关系的
发现从父亲移到儿子后,改变的距离对于当前节点子树内和子树外的是一样的
所以线段树维护一下区间加减取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的更多相关文章
- Codeforces.1110F.Nearest Leaf(线段树)
题目链接 \(dls\)讲过这道题,所以这不是线段树裸题吗,这场没打气气气气气=-= 现在是写着玩=v= \(Description\) 给定一棵\(n\)个点的树.\(q\)次询问,每次询问给定\( ...
- CodeForces 1110F Nearest Leaf | 线段树/换根
我--又诈尸了-- 代码几乎都不会写了,打场CF居然上分啦,开心!(虽然还是比不过列表里的各路神仙) 题目链接 题目描述 一棵\(n\)个点的有根树,规定一种dfs序(规则:编号小的点优先dfs),\ ...
- Codeforces 1110F(DFS序+线段树)
题面 传送门 分析 next_id = 1 id = array of length n filled with -1 visited = array of length n filled with ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
- CodeForces - 274B Zero Tree
http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...
随机推荐
- 20165223 《信息安全系统设计基础》 stat命令的实现-mysate
学习使用stat(1),并用C语言实现 1. 提交学习 stat(1) 的截图 2. man -k ,grep -r的使用 ...
- jmeter笔记(7)--参数化--用户定义的变量
录制的脚本里面有很多的相同的数据的时候,比如服务器ip,端口号等,当更换服务器的时候,就需要手动的修改脚本里面对应的服务器ip和端口号,比较繁琐,jmeter里面有一个用户自定义变量能很好的解决这个问 ...
- Djagno从入门到放弃
一.web应用.http协议.web框架 二.Django简介 三.路由控制 四.视图层 五.模版层 六.模型层:单表操作,多表操作,常用字段和参数,Django-model进阶 七.组件:Djang ...
- mysql 修改表结构、表字段注释语句
虽然现在有各种各样的工具可以直接对表结构进行修改,但是我还是喜欢使用语句进行修改.以下语句是对表增加字段.给字段加注释的语句 alter table orders add column isupdyq ...
- FFT & FNT 简要整理
几周前搞了搞--有点时间简要整理一下,诸多不足之处还请指出. 有哪些需要理解的地方? 点值表示:对于多项式 \(A(x)\),把 \(n\) 个不同的 \(x\) 代入,会得出 \(n\) 个不同的 ...
- CNN 激活函数
CNN: 1\ Siamoid 2\ Relu + Softplus 图片来源: http://ufldl.stanford.edu/tutorial/supervised/MultiLayerNeu ...
- oldboy s21day14装饰器模块和面试题
# 1.为函数写一个装饰器,在函数执行之后输入 after"""def wrapper(arg): def inner(*args): arg() print('afte ...
- python try exception finally记录
try exception finally中,finally下的语句块始终会执行 测试finally代码 def test_try_exception(a, b): '''测试异常捕获语句''' re ...
- [译]asp-net-core-mvc-ajax-form-requests-using-jquery-unobtrusive
原文 全文源码 开始项目 项目使用了package.json'文件,添加需要的前端package到项目中.在这我们添加了jquery-ajax-unobstrusive`. { "versi ...
- redhat7.4切换yum源为免费源
1.redhat是Linux系统中付费的企业版,虽然安装什么是免费的,但是需要注册. 如果你有注册码,暂请出门左拐(我没有注册码,所以我也不会注册,不用往下看了). Linux系统收费版:RedHat ...