CF750F New Year and Finding Roots 构造+树论
Posted lqsukida
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF750F New Year and Finding Roots 构造+树论相关的知识,希望对你有一定的参考价值。
正解:构造
解题报告:
交互题交互题!哇好新鲜啊QwQ
首先考虑最傻逼的做法,应该是每个人都能想到的
首先看一下它给的条件,考虑到完全二叉树的性质,就可以发现,如果给的邻居只有一个,说明是叶子,有两个,说明是根,有三个,说明是普通的节点
然后就分情况讨论鸭(以下内容都是从最差的情况即h=7为基础的讨论
如果运气好,问到了根,得嘞那就不用再问辣ans出来辣
如果问到了一个叶子节点,那就会给一个非根非叶子节点,就继续询问这个普通节点
如果问到了一个普通节点,就会有三个邻居,那就依次选,并利用已知条件优化一下
具体怎么做我就不说辣反正就是枚举一通+所有人都想得到的优化
说一下正解趴
首先可以想到,假如给一条链,链的一端是叶子节点,那么这条链上每个节点的深度都能知道了是趴
那假如我们第一次问,问到了一个普通节点,现在要求它的深度,怎么求呢
随便问两条链,从三个邻居中选出俩然后一条路问到黑的那种,经过节点数比较少的那条一定是经过它的儿子的笔直向下的一条链(如果相等就都是)(不理解的可以画下图很快就能get辣
同时我们还可以知道三个邻居中哪个是它爹哪些是它崽
然后我们就能get一个构造方法
随机一个点,按照上面的方法求出它的深度
↓
找到当前已知深度最低的点
↓ ↑
随机一条链,更新当前点祖先的深度,回到操作2
就这么一直做做做下去就能保证一直往上就能找到根节点了嘛
但是继续思考
当h=7的时候,假如运气有这——么背,当询问到深度=2的时候(规定根节点深度为1),如果选一条链通向叶子节点,就要问5次,就会要超过辣
但是考虑,当深度=2的时候,我们未知的邻居节点只有两个,一定有一个是根,所以只要问1次就出来了,问5次肯定亏辣
当深度=3的时候一样,具体不剖析了反正一样是,打破砂锅问到底就很亏不如直接问
最后通过一系列计算可以发现当最惨的情况下也只用问17次,但是第17次问到的一定是树根,所以其实只要问16次,就刚好!
over!
等下放代码QwQ!
以上是关于CF750F New Year and Finding Roots 构造+树论的主要内容,如果未能解决你的问题,请参考以下文章
CF1284E New Year and Castle Construction
CF1284E New Year and Castle Construction
CF1279F New Year and Handle Change 题解
CF611H New Year and Forgotten Tree