首页 > 其他分享 >【构造,树】【Loj】Loj6669 Nauuo and Binary Tree

【构造,树】【Loj】Loj6669 Nauuo and Binary Tree

时间:2023-07-07 10:24:35浏览次数:52  
标签:Binary Loj 询问 Tree 距离 已知 重剖 二叉树 lca

2023.7.3 Problem Link

交互库有一棵 \(n\) 个点的二叉树,你每次可以询问两个点之间的距离,猜出这棵二叉树。\(n\le 3000\),询问次数上限 \(30000\)。


首先给你距离一定是先把每个点的深度问出来,确定一个大致的考虑顺序。

然后我们开始仔细思考“距离”这个条件怎么用。发现询问两个未知的点之间的距离没啥用,询问两个已知的点很蠢,于是只可能询问未知点和已知点之间的距离。

假设未知点是 \(u\),已知点是 \(v\),那我们就得到了 \(dep[\mathrm{lca}(u,v)]\)。进一步,\(v\) 已知,这意味着我们可以知道 \(\mathrm{lca}(u,v)\) 是哪个。

走到这一步这道题就很明朗了。我们希望进行一个类似于二分的过程,结合二叉树这一点,我们可以将考虑范围缩小到链往下的一棵子树内。这不就是重剖吗?做完了。

具体地,对于每个新点,对已知的树进行重剖,找到当前根所在重链的底端,询问新节点和它的距离,并改变当前节点。次数为 \(\sum_{i=1}^n \log i=O(n\log n)\),并且常数很小,很符合题目限制。

标签:Binary,Loj,询问,Tree,距离,已知,重剖,二叉树,lca
From: https://www.cnblogs.com/Charlie-Vinnie/p/17534096.html

相关文章

  • 【线段树】 HDOJ 5274 Dylans loves tree
    用dfs序构建线段树,然后用lca求出两点间路径的xor和。。。#include<iostream>#include<queue>#include<stack>#include<map>#include<set>#include<bitset>#include<cstdio>#include<algorithm>#include<cstring>#include......
  • 【并查集】 HDOJ 4786 Fibonacci Tree
    就是求出搞成最小生成树的最少白边和最多白边的数量。。。。#include<iostream>#include<queue>#include<stack>#include<map>#include<set>#include<bitset>#include<cstdio>#include<algorithm>#include<cstring>#include<......
  • vue-treeselect 被 overflow 遮挡
    场景在一个内容区域设置了overflow纵向滚动的对话框中,内部的vue-treeselect组件下拉框选项被遮挡了。解决办法给vue-treeselect设置appendToBody和z-index属性。注意事项设置了appendToBody后,下拉框选项的字号会变大。为了与原来的字号相匹配,需要修改样式。找......
  • 时序数据库深入浅出之存储篇——本质LSMtree,同时 metric(比如温度)+tags 分片
    什么是时序数据库先来介绍什么是时序数据。时序数据是基于时间的一系列的数据。在有时间的坐标中将这些数据点连成线,往过去看可以做成多纬度报表,揭示其趋势性、规律性、异常性;往未来看可以做大数据分析,机器学习,实现预测和预警。时序数据库就是存放时序数据的数据库,并且需要支持时序......
  • el-tree树点击全选按钮,全部展开并且全选
    先看图:代码如下://全部选中qxClick(){this.isQx=!this.isQx;//判断按钮的状态this.expandAll();if(this.isQx){console.log(this.isQx,"-------------------------------",this.datas);//设置this.$r......
  • Git神器| SourceTree安装使用教程
    SourceTree是Windows和MacOSX下免费的Git客户端管理工具。支持创建、克隆、提交、push、pull和合并等操作。一、sourcetree的安装1.下载sourcetree下载链接:Sourcetree|FreeGitGUIfor MacandWindows2.安装sourcetree点击安装,第一个创建Bitbucket账户可跳过初......
  • [LOJ 6029]「雅礼集训 2017 Day1」市场 题解
    这道题恶心之处在于区间向下取整。这里给出两种思路:区间覆盖做法如果最大值和最小值向下取整后相等,则对此区间进行区间覆盖。我考场写的是这个,但是码错了,加上习惯不好,\(100\to64\),再加上烦了弱智错误,\(64\to9\),不给出代码。差值相等做法注意到相邻两数的向下取整的差值不......
  • [LOJ 6030]「雅礼集训 2017 Day1」矩阵 题解
    首先不难想到一个贪心,就是先填出一个全黑的行,然后再用其填黑列。而且在其中“填出一个全黑的行步数”我们应该最小化。这个贪心的正确性证明如下:必要性:填黑列的必要条件为有一个全黑的行。充分性:“填黑列的步数”就是“非全黑列的数量”。显然,如果填出一个全黑的行的过程中......
  • tree-test
    #include<iostream>#include<stack>usingnamespacestd;typedefstructBiTNode{ chardata; structBiTNode*lchild; structBiTNode*rchild;}BiTNode,*BiTree;voidCreateTree(BiTree*Tree){ charch; ch=getchar(); if(ch=='.')......
  • [atAGC062E]Overlap Binary Tree
    记\(m=\frac{n+1}{2}\),即二叉树的叶子个数对于合法序列,按以下方式生成其对应的二叉树:(此处二叉树指无标号、以一个点为根且每个非叶节点恰有两个儿子的树)恰存在一个区间与其余区间均有交,将其作为根并(在序列中)删除恰存在一个\(i\in[1,n)\)使得\(\max_{1\lej\lei}R_{j}<L_{i+......