[国家集训队] Tree I
借助这道题目把wqs二分讲明白
考虑如下一个问题:
现在一共有若干个物品,物品被分成两组,现在从中选出若干个物品,但是题目会给出某种限制(也就是在这种限制条件下,物品的选择不是随意的,所有选择集合中,只有一些集合符合题目给出的限制,这样的集合才可以被选择),这种限制只跟物品本身有关而跟其权值无关(i.e. 对一个相同的物品选择集合,其中的物品权值无论如何变化,这个集合的合法性都不改变),而且必须从第一类物品中选出
我们设
比如
那么如果题目给出的
显然我们是不能求出
假设现在有一条直线,斜率为
通过
我们给第一类物品的权值都减去
为什么?我们将直线写成
然后我们去检查此时第一类物品选出的个数,很显然可以根据这个个数与
然后这一道题目的
此时当然可以二分实数,然而很容易TLE,所以我们来考察函数
显然
显然斜率为
然后我们再来考察发生上述情况会怎么样,只有可能像这样:
其中绿色的是我们二分的斜率,然后我们的算法跑出来的是第三个红点(从左往右),我们需要第二个红点,当斜率减一的时候,就直接把三个红点都舍弃了
所以此时就有一个很简单的解决方法了:在Kruscal的排序中,点权相同的将白边摆在前面,然后再更新即可。由于我们是在选出白边不低于
还有这两篇博客一和博客二还没看(由于wqs二分与费用流的关系很大,所以学了网络流之后再看)
update 2024.7.14
可以好好看看代码,注意不要每次二分都重新排序,而是最开始就将两类边分开,然后利用归并排序即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构