CF1062E Company
CF1062E Company
链接
cf
luogu
题目大意
给定一颗树,有若干个询问,每个询问给出 l,r,要求编号为 ll~rr 的点任意删去一个之后剩余点的 LCA 深度最大,输出删去点的编号和 LCA 的最大深度
思路
一堆点的lca就是dfs序列的最大和最小的lca
因为只能删除一个点,那就看看删除最大的优秀还是删除最小的优秀。
修改其他的lca是不变的。查询次大线段树麻烦,主席树还能短一点。
代码
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+7;
int read() {int x=0,f=1;char s=getchar();for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';return x*f;
}
int n,q,a[N];
vector<int> G[N];
namespace seg {struct node {int ls,rs,siz,nb;}e[N*30];int cnt,rt[N];void insert(int &rt,int old,int l,int r,int id,int nb) {rt=++cnt;e[rt]=e[old];e[rt].siz++;if(l==r) return e[rt].nb=nb,void();int mid=(l+r)>>1;if(id<=mid) insert(e[rt].ls,e[old].ls,l,mid,id,nb);else insert(e[rt].rs,e[old].rs,mid+1,r,id,nb); }int k_th(int rt,int old,int l,int r,int k) {if(l==r) return e[rt].nb;int now=e[e[rt].ls].siz-e[e[old].ls].siz;int mid=(l+r)>>1;if(now>=k) return k_th(e[rt].ls,e[old].ls,l,mid,k);else return k_th(e[rt].rs,e[old].rs,mid+1,r,k-now);}
}
namespace diss_tree {int dep[N],siz[N],fa[N];int top[N],son[N],cnt;void dfs1(int u,int f) {a[u]=++cnt;fa[u]=f;siz[u]=1;for(auto v:G[u]) {if(f==v) continue;dep[v]=dep[u]+1;dfs1(v,u);siz[u]+=siz[v];if(siz[son[u]]<siz[v]) son[u]=v;}}void dfs2(int u,int topf) {top[u]=topf;if(!son[u]) return;dfs2(son[u],topf);for(auto v:G[u])if(!top[v]) dfs2(v,v);}int lca(int x,int y) {while(top[x]!=top[y]) {if(dep[top[x]]<dep[top[y]]) swap(x,y);x=fa[top[x]];}return dep[x]<dep[y] ? x : y;}
}
int main() {n=read(),q=read();for(int i=2;i<=n;++i) {int x=read();G[x].push_back(i);G[i].push_back(x);}diss_tree::dfs1(1,0);diss_tree::dfs2(1,1);for(int i=1;i<=n;++i) seg::insert(seg::rt[i],seg::rt[i-1],1,n,a[i],i);for(int i=1;i<=q;++i) {int x=read(),y=read();int first_max=seg::k_th(seg::rt[y],seg::rt[x-1],1,n,1);int second_max=seg::k_th(seg::rt[y],seg::rt[x-1],1,n,2);int first_min=seg::k_th(seg::rt[y],seg::rt[x-1],1,n,y-x+1);int second_min=seg::k_th(seg::rt[y],seg::rt[x-1],1,n,y-x);int tmp_x=diss_tree::dep[diss_tree::lca(first_max,second_min)];int tmp_y=diss_tree::dep[diss_tree::lca(second_max,first_min)];if(tmp_x > tmp_y) printf("%d %d\n",first_min,tmp_x);else printf("%d %d\n",first_max,tmp_y);}return 0;
}
转载于:https://www.cnblogs.com/dsrdsr/p/10785822.html
CF1062E Company相关推荐
- 见到了“公司”定义一个Company类,那么见到了“字段”是不是也可定义一个Column类?...
既然见到了公司,我们可以定义一个Class Company ,那么我们见到了字段,是不是也可以定义一个Class ColumnInfo呢? 公司的描述信息类: 代码 public class Comp ...
- 博世力士乐液压_[Event Review] Company Visit Bosch Rexroth 博世力士乐液压工厂参观
Event Review Company Visit: Bosch Rexroth (Beijing) Hydraulic Co. Ltd. 博世力士乐(北京)液压有限公司 April 24, 2 ...
- SAP MM 执行事务代码MRRL报错-No message was found for partner 100065 company code 0001-
SAP MM 执行事务代码MRRL报错-No message was found for partner 100065 company code 0001- 1, 执行事务代码MRRL 触发invoi ...
- SAP MM 物料库存转固定资产,报错:You cannot post to asset in company code 1900 fiscal year 2021
SAP MM 物料库存转固定资产,报错:You cannot post to asset in company code 1900 fiscal year 2021 使用事务代码MIGO,移动类型24 ...
- SAP IDoc Post不成功,报错 - A company code cannot be determined for LI 0000100061 –
SAP IDoc Post不成功,报错 - A company code cannot be determined for LI 0000100061 – IDoc#4096出现如下报错:A comp ...
- Elasticsearch索引(company)_Centos下CURL增删改
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch索引说明 a. 通过上面几篇博客已经将Elastics ...
- F110报错:Company codes **/** do not appear in proposal ***; correct
F110自动支付的时候报错: Company codes CS19/CS19 do not appear in proposal 29.09.2015 0929A; correct Message n ...
- SAP Spartacus My Company url的数据源, 来自Sampledataaddon
下图My company对应的url为/organization,这个url维护在Commerce Cloud什么地方的? I can debug to know it's returned by c ...
- HubSpot company数据在UI上的展示和通过API方式进行获取
在网页查看所有的company: https://app.hubspot.com/contacts/6798828/companies/list/view/all/? 打开第一个名为SAP的compa ...
最新文章
- 关于CSS3的filter(滤镜) 属性
- python多线程怎么写日志_Python日志记录在多进程下的使用
- 微型计算机频繁死机的原因,电脑经常死机是什么原因|电脑经常死机的解决方法...
- 修复IE下列表 li 底部空行Bug
- NSURLConnection和Runloop
- SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
- kafka监控之kafka-run-class.sh
- AutoJs4.1.0实战教程---终极福利Apk
- (附源码)计算机毕业设计ssm基于JAVA宠物店管理系统
- nod32 破解的用户名密码
- CodeMeter***大赛战况:百人参赛,无人摘金!
- C语言用结构体实现串口协议
- 连云港师范专科学校计算机老师,喜报:我校学生在2021年中国大学生计算机设计比赛江苏省赛中获一等奖...
- 电脑重装系统后如何把网站设为首页
- 蝇量级的JSON模型转换库(OC,Swift通用)
- 重回童年的经典系列 |《保卫萝卜》来了,你还记得它吗?复刻 源码+解析 @怀旧的你
- ictclas4j java_ictclas4j 分词工具包 安装流程
- 5G学习笔记之系统消息
- Hyperic HQ简介
- Opencv实战——OCR文档扫描
热门文章
- android手机安装python并写代码运行
- Android RecyclerView、ListView实现单选列表的优雅之路.
- substr 与 substring 的区别
- 浅谈网站内容应该做给谁看?
- Java 内置的数据类型
- ASP.NET之SqlBulkCopy
- MATLAB学习笔记(十五)
- 选择分集matlab程序,瑞利衰落信道下采用MRC分集误码性能Matlab程序
- 在线图表分析制作_(漂亮)象形柱状图表制作 在线图表制作工具
- angular将html导出为pdf,如何使用Angular进行转换:将HTML转换为PDF