首页 > 其他分享 >ABC 321 E Complete Binary Tree

ABC 321 E Complete Binary Tree

时间:2024-06-13 18:55:34浏览次数:13  
标签:Binary ABC return min int Tree 二叉树 向下 节点

题意
有T次询问,每次询问给出三个参数N,X,K,分别表示,有N个节点的二叉树,询问从X号节点出发走K条边能走到多少个不同的点。

思路
对于一颗二叉树上的点,我们可以分两种情况,一种是向上走,一种是向下走。

  • 对于向下走,我们只需要不停的、分别的遍历当前节点的右儿子(对于二叉树就是序号乘2),直到向下走k层。如果中途存在当前的左儿子>N并且k没有走完,那么直接退出,因为不可能向下走k层。而走完k层时,我们要查看当前的有右儿子是否大于N,直接取min(r,N)即可。向下找的最后结果就是min(r,N)-l+1
  • 对于向上走,我们每次到达一个父节点,都想进行一次向下的遍历(因为路程k可以通过折返的形式呈现),在这个过程中,必然会经过x节点并且通过x向下找,这样会导致重复,我们只需要每一次进行向下遍历是减去直接向下走的结果即可。具体的一些细节看代码吧,挺好调的。

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;

int dfs(int x,int n,int k)//计算x号点向下走k条边能走到的点数 
{
	if(k<0) return 0;
	int l=x;
	int r=x;
	for(int i=0;i<k;i++)
	{
		l<<=1;
		r=r<<1|1;
		if(l>n) return 0;
	}
	return min(n,r)-l+1;
}

void solve()
{
	int n,x,k;
	cin>>n>>x>>k;
	if(k==0)
	{
		cout<<1<<endl;
		return ;
	}
	int ans=dfs(x,n,k);
	while(x/2)
	{
		k--;
		ans+=dfs(x/2,n,k)-dfs(x,n,k-1);
		x>>=1;
	}
	cout<<ans<<endl;
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	int t;
	cin>>t;
	while(t--)
	{
		solve(); 
	}
	
	
	
	
	return 0;
 } 

标签:Binary,ABC,return,min,int,Tree,二叉树,向下,节点
From: https://www.cnblogs.com/lulu7/p/18246537

相关文章

  • ABC 321 F #(subset sum = K) with Add and Erase
    题意有一个箱子,每次可以向里面添加或者拿走一个数,问每次操作过后,任选箱子里的数相加,总和等于k的方案数是多少。思路萌新算是学到新东西了,这其实是个可撤销背包的板题。我们先考虑一个问题:对于普通计数类dp,我们现在禁用某一个数i,我们现在想知道某一个数j有多少种方式表示(即dp......
  • AT_abc335_d [ABC335D] Loong and Takahashi 题解
    题目传送门题目大意:高桥在一个地图的中心,有一条龙从地图的左上角开始,每次只能到达与他相邻的四个点,现给出地图的边长,请你给出一种方案,使得地图上的每个点除高桥所在的地方外,都被龙走过且不重复。解题思路:首先,我们拿到这个题目,想十秒,便会发现,我们按照螺旋矩阵的方式行走,......
  • bash中$'abc'用法
    在shell脚本或命令行中,$'abc'并不是一个标准的字符串表示方法。通常,shell中的字符串可以用单引号('abc')或双引号("abc")来定义。然而,$'...'这种语法在某些shell环境(如bash)中确实存在,并且它用于处理带有转义字符的字符串。这种语法允许你在字符串中使用特定的转义序列,例如\n......
  • ABC357
    Alink循环加每一个数,加到哪个数不能加了输出前一个数,注意如果加到最后还能加,记得输出\(n\)。点击查看代码#include<bits/stdc++.h>usingnamespacestd;intn,m;inth[105],sum;signedmain(){ cin>>n>>m; for(inti=1;i<=n;++i) cin>>h[i]; for......
  • java+vue3+el-tree实现树形结构操作
    基于springboot+vue3elementPlus实现树形结构数据的添加、删除和页面展示效果如下代码如下,业务部分可以自行修改java后台代码importcom.baomidou.mybatisplus.core.conditions.query.QueryWrapper;importcom.daztk.mes.common.annotation.LogOperation;import......
  • CEC2013(python):六种算法(ABC、PSO、CSO、OOA、DBO、RFO)求解CEC2013
    一、六种算法简介1、人工蜂群算法(ArtificialBeeColonyAlgorithm,ABC)2、粒子群优化算法PSO3、鸡群优化算法CSO4、鱼鹰优化算法OOA5、蜣螂优化算法DBO6、红狐优化算法RFO二、6种算法求解CEC2013(1)CEC2013简介参考文献:[1]LiangJJ, QuBY, SuganthanPN......
  • ABC 320F Fuel Round Trip
    题意在坐标轴上给定N个点,坐标依次为x1,x2,...,xn,你需要从原点前往xn并且实现往返,其中从第一个点到第N-1个点上有加油站,其中第i个加油站可以花费p[i]购买f[i]升汽油,汽油的上限为H升,每行驶一单位距离需要花费一升汽油。在全部过程中每个加油站最多使用一次,判断是否可以完成行程并......
  • el-tree设置每个节点的连接线 修改展开图标为加减号(附效果图)
    ::v-deep.treeCont{.el-tree>.el-tree-node:nth-of-type(1){border-top:none!important;color:red;}.el-tree>.el-tree-node:after{border-top:none;}.el-tree:first-child{border-top:none!important;}......
  • tree-cli 生成项目目录
    全局安装插件npminstall-gtree-cli基本使用#查看帮助tree--help#指定目录层级(深度)tree-l2#将结果输出到test.txt文件tree-l2-otest.txt#只输出目录-dtree-l2-otest.txt-d#忽略指定的目录或文件--ignoretreee-l2-otest.txt--ignore'n......
  • vue tree展开自动获取焦点
     打开弹窗设置默认焦点html代码重点:设置 node-key="id"  ref="table_dedh"<el-tree:data="dedhtreeData"node-key="id"ref="table_dedh":props="{children:'children',label:'label'}"@no......