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相关推荐

  1. 见到了“公司”定义一个Company类,那么见到了“字段”是不是也可定义一个Column类?...

    既然见到了公司,我们可以定义一个Class Company ,那么我们见到了字段,是不是也可以定义一个Class ColumnInfo呢? 公司的描述信息类: 代码 public class Comp ...

  2. 博世力士乐液压_[Event Review] Company Visit Bosch Rexroth 博世力士乐液压工厂参观

    Event Review Company Visit:  Bosch Rexroth (Beijing) Hydraulic Co. Ltd.  博世力士乐(北京)液压有限公司 April 24, 2 ...

  3. 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 ...

  4. 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 ...

  5. 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 ...

  6. Elasticsearch索引(company)_Centos下CURL增删改

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch索引说明 a. 通过上面几篇博客已经将Elastics ...

  7. 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 ...

  8. SAP Spartacus My Company url的数据源, 来自Sampledataaddon

    下图My company对应的url为/organization,这个url维护在Commerce Cloud什么地方的? I can debug to know it's returned by c ...

  9. HubSpot company数据在UI上的展示和通过API方式进行获取

    在网页查看所有的company: https://app.hubspot.com/contacts/6798828/companies/list/view/all/? 打开第一个名为SAP的compa ...

最新文章

  1. 关于CSS3的filter(滤镜) 属性
  2. python多线程怎么写日志_Python日志记录在多进程下的使用
  3. 微型计算机频繁死机的原因,电脑经常死机是什么原因|电脑经常死机的解决方法...
  4. 修复IE下列表 li 底部空行Bug
  5. NSURLConnection和Runloop
  6. SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
  7. kafka监控之kafka-run-class.sh
  8. AutoJs4.1.0实战教程---终极福利Apk
  9. (附源码)计算机毕业设计ssm基于JAVA宠物店管理系统
  10. nod32 破解的用户名密码
  11. CodeMeter***大赛战况:百人参赛,无人摘金!
  12. C语言用结构体实现串口协议
  13. 连云港师范专科学校计算机老师,喜报:我校学生在2021年中国大学生计算机设计比赛江苏省赛中获一等奖...
  14. 电脑重装系统后如何把网站设为首页
  15. 蝇量级的JSON模型转换库(OC,Swift通用)
  16. 重回童年的经典系列 |《保卫萝卜》来了,你还记得它吗?复刻 源码+解析 @怀旧的你
  17. ictclas4j java_ictclas4j 分词工具包 安装流程
  18. 5G学习笔记之系统消息
  19. Hyperic HQ简介
  20. Opencv实战——OCR文档扫描

热门文章

  1. android手机安装python并写代码运行
  2. Android RecyclerView、ListView实现单选列表的优雅之路.
  3. substr 与 substring 的区别
  4. 浅谈网站内容应该做给谁看?
  5. Java 内置的数据类型
  6. ASP.NET之SqlBulkCopy
  7. MATLAB学习笔记(十五)
  8. 选择分集matlab程序,瑞利衰落信道下采用MRC分集误码性能Matlab程序
  9. 在线图表分析制作_(漂亮)象形柱状图表制作 在线图表制作工具
  10. angular将html导出为pdf,如何使用Angular进行转换:将HTML转换为PDF