AGC002(D~F)【Kruskal重构树,博弈论,dp】
1|0正题
1|1AT1998 [AGC002D] Stamp Rally【Kruskal重构树,倍增】
https://www.luogu.com.cn/problem/AT1998
题目大意
给出个点条边的一张无向图,次询问两个人分别从,要求总共经过个点的情况下经过边的最大编号的最小值。
解题思路
直接上重构树然后预处理倍增数组和子树大小。
然后二分答案+倍增判断就好了,这样写是两个的,直接倍增一个也行但是比较麻烦。
时间复杂度:
1|2AT1999 [AGC002E] Candy Piles【博弈论】
https://www.luogu.com.cn/problem/AT1999
题目大意
堆糖果,第堆有个,有如下操作
- 取走糖果最多的那堆
- 所有堆中各取走一个
解题思路
考虑如果现在操作的那个人一直用第一个操作会输那么它肯定会用第二个操作,而此时会转换胜负态,那么下一个人也会继续这么做,但是如果到最后一个且刚好是偶数那么使用第一个操作就更优。
所以肯定存在一个数满足比这个位置大的都是在第二个操作被取走的,前的都是第一个位置被取走的。并且最后肯定是第二个操作。如果那么这个位置肯定是第一个操作被取走的,因为在此之前第二个操作不可能多过第一个操作。所以找到第一个的位置然后判断即可。
时间复杂度:
code
1|3AT2000 [AGC002F] Leftmost Ball【dp,组合数学】
https://www.luogu.com.cn/problem/AT2000
题目大意
有种颜色,第种有个,把所有排列中每种颜色的第一个染成同一种新的颜色(白色),求不同的排列数。
解题思路
相当于前缀颜色数小于等于前缀白色数,这个复杂度可以考虑平方的。
因为其实和第一个出现的颜色有关,我们可以只保留每种颜色的前两个来,然后剩下的都插入到它们后面就好了,设表示现在有个白色,出现了种颜色时的方案。
如果填白色就是直接,如果填颜色,我们可以在剩下的个颜色中选出一个来,第二个填在目前的最前面,然后现在的空位是个再填个就好了。
时间复杂度:
code
__EOF__

本文链接:https://www.cnblogs.com/QuantAsk/p/15457504.html
关于博主:退役OIer,GD划水选手
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构