Guess The Tree

采用“利用已知构造未知”的方法,假设我们现在已经获得了树的一部分,设为A,设B={1,2,3,...,n}A

每一次我们任选aA,bB,令l=a,r=b,询问(a,b),如果得到的答案x属于A,那么令l=x,否则的话另r=x,然后持续二分,最终会得到树上的一条边(看到询问次数也可以往二分想,只不过这个二分确实很新鲜)

易知上述过程的询问为O(nlogn)

一种错误做法:先一直询问(1,i),i[2,n],如果答案x1那么说明1i相连,否则的话说明h[x]=h[i]2(根节点1的深度为1);然后进行搜索遍历,用一个栈存储根节点到当前节点路径上的所有点,当遍历到节点x的时候,如果h[x]为偶数,那么找出所有之前的n1次询问答案为栈中深度h[x]2+1i,然后询问(x,i),设答案为v,添加边(v,i),(i,v);错误原因就在于我们找出的是所有i,而不是为x的子孙的i

posted @   最爱丁珰  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示