首页 > 其他分享 >CF1878G wxhtzdy ORO Tree

CF1878G wxhtzdy ORO Tree

时间:2023-10-09 17:45:29浏览次数:48  
标签:dep CF1878G fa int Tree fat ORO maxn lca

CF1878G wxhtzdy ORO Tree

image.png

设 \(f(x,y)\) 表示树上 \(x\) 到 \(y\) 简单路径上的点权或和中 \(1\) 的个数。

有一个性质:选取的 \(z\) 节点一定满足它比它左边的点(\(l\))或者右边的点(\(r\))的贡献至少要多一位,即 \(f(x,l)<f(x,z)\) 或 \(f(y,r)<f(y,z)\),有了这个性质,问题就简单很多了。

即 \(d_{i,j}\) 表示第 \(i\) 个点的祖先中满足第 \(j\) 位为 \(1\) 的最深节点的编号,把 \(x\) 到 \(y\) 的路径看成 \(x\) 到 \(lca\) 和 \(y\) 到 \(lca\) 的两段,考虑 \(z\) 在第一段路径上,只需要枚举 \(d_{x,i}\) 和 \(d_{y,i}\) 并检查是否合法(深度大于等于 LCA)然后暴力计算即可,对于 \(z\) 在第二段路径上的情况同理。

代码中使用倍增实现求 \(LCA\) 和一段路径的或和,复杂度为 \(\mathcal O(n\log n \log V)\)。

int cnt,T,q,maxn,n,v[200001][21],d[200001][31],dep[200001],a[200001],fa[200001][21],head[200001],to[400001],nex[400001];
inline void add(int x,int y){to[++cnt]=y,nex[cnt]=head[x],head[x]=cnt;}
void dfs(int k,int fat)
{
	fa[k][0]=fat,memcpy(d[k],d[fat],sizeof(d[k])),dep[k]=dep[fat]+1,v[k][0]=a[k];
	for(int i=0;i<=30;++i)if(a[k]>>i&1)d[k][i]=k;
	for(int i=1;i<=20;++i)fa[k][i]=fa[fa[k][i-1]][i-1],v[k][i]=v[k][i-1]|v[fa[k][i-1]][i-1];
	for(int i=head[k];i;i=nex[i])if(to[i]!=fat)dfs(to[i],k);
}
inline int LCA(int x,int y)
{
	if(dep[x]>dep[y])swap(x,y);
	for(int i=20;i>=0;--i)if(dep[fa[y][i]]>=dep[x])y=fa[y][i];
	for(int i=20;i>=0;--i)if(fa[y][i]!=fa[x][i])y=fa[y][i],x=fa[x][i];
	return x==y?x:fa[x][0];
}
inline int ask(int x,int fat)
{
	int ans=0;
	for(int i=20;i>=0;--i)if(dep[fa[x][i]]>=dep[fat])ans|=v[x][i],x=fa[x][i];
	return ans|v[fat][0];
}
void mian()
{
	read(T);int x,y,lca,vx,vy;
	while(T--)
	{
		read(n),memset(head,0,sizeof(head)),cnt=0,maxn=0;
		for(int i=1;i<=n;++i)read(a[i]);
		for(int i=1;i<n;++i)read(x,y),add(x,y),add(y,x);
		dfs(1,0),read(q);
		while(q--)
		{
			read(x,y),lca=LCA(x,y),maxn=0,vx=ask(x,lca),vy=ask(y,lca);
			for(int i=0;i<=30;++i)if(d[x][i]&&dep[d[x][i]]>=dep[lca])maxn=max(maxn,__builtin_popcount(vy|ask(d[x][i],lca))+__builtin_popcount(ask(x,d[x][i])));
			for(int i=0;i<=30;++i)if(d[y][i]&&dep[d[y][i]]>=dep[lca])maxn=max(maxn,__builtin_popcount(vx|ask(d[y][i],lca))+__builtin_popcount(ask(y,d[y][i])));
			write(maxn);
		}
		puts("");
	}
}

标签:dep,CF1878G,fa,int,Tree,fat,ORO,maxn,lca
From: https://www.cnblogs.com/WrongAnswer90-home/p/17752338.html

相关文章

  • gitHub项目显示tree结构方便查阅Octotree和github中文化Tampermonkey
    1.google,安装Octotree插件,这个自行搜索,安装完成2.打开项目会出现这样的界面,安装https://blog.csdn.net/Mango_Bin/article/details/111612142,这里面链接地址去设置 1.Tampermonkey,在github中搜索github-chinese,找到相应的仓库 2.往下划拉点击Tampermonkey去安装,安装完......
  • python xml(ElementTree)
    pythonxml处理(ElementTree)1.模块导入fromxml.etree.ElementTreeimportElementTree,Element,SubElement2.对象概述ElementTree:表示整个xml层级结构Element:表示树形结构中的父节点SubElement:表示树形结构中的所有子节点,有些节点既可以是父节点,也可以是子节点3.Elem......
  • kernel如何根据dtb文件生成device tree
    kernel如何根据dtb文件生成devicetreedevicetreedtb文件中的内容会被内核组成了devicetree,整个tree上由两个数据结构组成:structdevice_node和structproperty。structdevice_node{ constchar*name; phandlephandle; constchar*full_name; structfwnode_handle......
  • 递归解析Json,实现生成可视化Tree+快速获取JsonPath
    内部平台的一个小功能点的实现过程,分享给大家:递归解析Json,可以实现生成可视化Tree+快速获取JsonPath。步骤:1.利用JsonPath读取根,获取JsonObject2.递归层次遍历JsonObjec,保存结点信息3.利用zTree展示结点为可视化树,点击对应树的结点即可获取对应结点的JsonPath1.利用JsonPath......
  • 界面组件DevExpress WinForms v23.1 - TreeList、UI模板全新升级
    DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!DevExpressWinForm 控件已正式发布v23.1版本,此版......
  • c# 用SapNwRfc调用sap内置bom函数用TreeView把bom展示出来
    一个需求,winform根据料号,查询sap 的bom,然后用控件调用sap内置bom函数,根据料号查询bom用TreeView把bom展示出来树形控件TreeView展示出来,TreeView的好处是父级子级直观明了。sap关于bom 的tcode 主要是cs11,cs12,cs13。cs12可以显示多级bom,查询出来是这样的: 这种表现方式,不是......
  • 【bitset】【线段树】CF633G Yash And Trees 题解
    CF633G简单题。先看到子树加和子树质数个数和,果断转换为dfs序进行处理。既然有区间求和,考虑线段树。若对于每一个节点维护一个\(cnt\)数组,用二进制数\(x\)来表示,即当\(cnt_i=1\)时第\(i\)位为\(1\)。设当前节点为\(u\),左右子节点分别为\(ls\)和\(rs\)。发现......
  • chisel安装和使用+联合体union的tagged属性+sv读取文件和显示+sv获取系统时间+vcs编译
    chisel安装和使用sbt:scalabuildtool,是scala的默认构建工具,配置文件是build.sbt。mill:一个新的java/scala构建工具,运行较快,与sbt可以共存,配置文件是build.sc。chisel的安装可以参考这篇文章。安装过程务必联网,而没有联网情况下的安装,按照其它的说明,如移动缓存文件等,并无法正常......
  • 前端最新支持四级及以下结构仿企查查、天眼查关联投资机构 股权结构 tree树形结构 控
    ​随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随意的进行组合。大大提升开发效......
  • 洛谷 Power Tree 题解
    题目链接PowerTree分析将叶子节点按dfs序重标号后,每次控制操作可以转化为将子树内叶子节点所在区间加(或减)一个数不难可以想到将叶子区间进行差分每次对\(l\)到\(r\)的操作可以转化为将\(l\)上的数转移到\(r+1\)上每次操作后差分数组的和不变将所有点权变为\(0\)......