Construct Tree

官解写挺好

首先对l从小到大排序

如果ln+ln1>d,那么显然无解

如果ln+ln1d

此时考虑一组边,长度总和为d

如果ln包含在这组边里面,那么有一种构造方式如下

如果ln不包含在任何一组这种边,那么我们一定要找到一组这样的边,使得这条直径上的一个点v(设这条直径的点是1,2,3,...,p),从1v的距离和从vp的距离都不比ln小(如果找不到,那么ln无论接在哪里,直径的长度都比d大,就无解了),此时可以把除了这组边的其他边都接在v上,就是一种方案

update 2024.7.10

重新做一遍,进步还是很大

首先观察样例就会发现我们先找出组成直径的边,然后剩下的边弄成类似菊花图的样子是最优的

于是就可以考虑直径的边是否包含最大边,于是就有上面的做法了

但是有一个问题,就是说当ln不包含在直径的边中时,为什么随便找一组直径就能判断无解了,如果这组不行但是另一组行呢?

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