2022.7.26 模拟赛

T1
link
(大)模拟。。。

打了 1h,调了很久。。。

我觉得应该一句一句读,可以高亮标记一下。。。

坑点:

  1. 会有负数,所以向下取整不能 “/2”。
  2. 输出注意 “0”。

T2
image
image

(SPJ)

乱打的。。。过了。。。原来是《签到题》啊。

充分发挥人类智慧。发现 gggg...zzzz..g/z 似乎是正确的。当然更 nb 的,可以将认为合理的都试一次。

证明:其实也很显然(?)。这里先咕了。

出题人还是挺厉害的。

但如果 \(n\) 小也可以差分约束。不知道本题使用 spfa 优化的差分约束复杂度是不是正确的。


T3
image
image

个人认为也是一道好题。(至少比较妙)

发现一个性质:如果一个数比上一个数小,那么在没有其他限制的条件下,它可以取 \(1\)。这就给了我一个启示:dp,从左到右跑一遍看左边比右边小的情况,从右到左看右边比左边的小的情况即可。

先证合法:想一想发现肯定合法,懒得写了(/xyx)

再证最优:发现每个数都是它能取到的最优情况,所以肯定最优(/xyx)


T4
image
image

也是一道好题。

考虑肯定是对于 \(dis(x,y)\),找出 \(x,y\)\(1\) 之间路径的交,令其中一个点为 \(z\),则 \(dis(x,y)=\min\{dis(x,z)+dis(y,z)\}\)

然后现在要快速找到 \(x\) 到它祖先的最短路。

考场上的想法是对于每个点直接找到它到 \(1\) 节点路径上所有的边,然后每次跑 dijkstra 不会 T?应该想清楚一点的。。

发现对于每一条边只会被存在于 \(20\) 次 dijkstra 中,所以其实时间复杂度是 \(\mathcal {O}(20mlog_2m)\) 的。还有就是 \(dis[x][y]\) 改成 map,但还是一个 \(\log\),因为这两个 \(\log\)
是独立的。

实现改成对子树操作,发现找祖先在某种意义上就等于找子树啊。。好打多了。

posted @ 2022-07-26 21:23  Saintex  阅读(37)  评论(1编辑  收藏  举报