2022.11.22

P8579

我认为这题挺难的,应该不止蓝题难度,我做它的时候没有一步是严谨的甚至到最后 A 的时候都是不具有正确性的
首先我们要看出它是个二分,然后我们要感性理解一下它的最劣情况,用于 \(check\)
感性理解,我们让一个联通块里的其中一个点(我们叫它源点)的权值为 \(inf\),其他的这个连通块里的点为 \(0\)(实际上是无限接近 \(0\) 的正实数),因为有源点外的点有点权的话就可以帮助源点分摊,就无法达到我们想要的最劣情况了。
在每一个联通块里枚举每一个点并二分 \(x\),每次二分跑一遍 \(bfs\) 模拟分摊过程,取所有二分出来的答案的最大值即为最终答案。
然而这样会 \(TLE\)
但是我直接用其中一个度数最大的点作源点冲过去了
我们需要在把每一个点作为源点时先用 \(bfs\Theta(n + m)\) 预处理出每一层要扩展的点,这样在二分的时候就不需要每次跑一遍了,总时间复杂度 \(\Theta(n(n+m)+n^2log_\text{值域})\)


P2592

瞎搞一顿 A 了,一看题解发现自己的做法好像非常 Naive。
我的想法是枚举当前人数和男生人数,最大/小前缀和,当前选的是男/女生,复杂度没有问题但常数巨大。
但其实好像只要考虑后缀就好了。


P7334

线段树卡常题。
其实不是卡常,只是我只用一个 \(flag\) 维护操作次数的话 \(flag\) 会被 \(pushdown\) 下去,之后遍历到这个节点时就没法使用我们的 区间开平方时,如果当前区间有被平方过,就直接把平方次数-1 优化了(这个错误其实挺蠢的)。
加深对线段树的理解,是道好题。


P2195

感觉不像是紫的,毕竟跟这个一模一样。
总之就是虽然不会严谨证明,但感觉这样就是对的。
但这题带给我的最大收获还是——
\(CO2\) 二氧化碳大法好!
首先把万能头撅掉会使得本地 \(Vscode\) 跑得飞快,只需要 0.114s 即可编译 + 运行一条龙!
并成功用 C 拿到了这题的最优解。
虽然这很不要脸。

posted @ 2022-11-22 21:34  Cotsheep  阅读(16)  评论(0编辑  收藏  举报