UER #1
UOJ12 【UER#1】猜数
给出 \(g,l\),满足存在 \(n\) 使得 \(n ^ 2 = gl\),求 \(a, b\) 满足 \(g | a, g|b, ab = gl\) 的所有 \(a, b\) 中 \(a +b\) 的最小和最大值。
\(g, l \le 10^{18}\)。
数学
随便推,最小值为 \(2g\sqrt{\frac{l}{g}}\),最大值为 \(l + g\)。
UOJ13 【UER#1】跳蚤OS
模拟题,搞个并查集即可。
UOJ14 【UER#1】DZY Loves Graph
DZY开始有 \(n\) 个点,现在他对这 \(n\) 个点进行了 \(m\) 次操作,对于第 \(i\) 个操作(从 \(1\) 开始编号)有可能的三种情况:
- Add a b: 表示在 \(a\) 与 \(b\) 之间连了一条长度为 \(i\) 的边(注意,\(i\)是操作编号)。保证 \(1 \leq a, b \leq n\)。
- Delete k: 表示删除了当前图中边权最大的k条边。保证 \(k\) 一定不会比当前图中边的条数多。
- Return: 表示撤销第 \(i-1\) 次操作。保证第 \(1\) 次操作不是 Return 且第 \(i-1\) 次不是 Return 操作。
请你在每次操作后告诉DZY当前图的最小生成树边权和。如果最小生成树不存在则输出 \(0\)。
\(n \le 3\times 10^5, m \le 3\times 10^5\)。
并查集
感觉最近想题目越来越在往套路上扯……
撤销、加边、回退,这不就是可持久化并查集板子吗?!好了,我 AK 了!
然后一写(代码),发现空间寄了,因为空间只有 \(\tt 64MB\),于是直接没了……成了 \(60\) 分,听官方题解说有 \(80\sim 100\) 分,但是为什么我常数那么大呢???
考虑比较正经的写法,只有 Add 和 Delete 操作是比较好处理的,直接可撤销并查集,如果有了 Return 操作,但是我们可以发现,Return 的次数最多一次!于是对于 Add 的复杂度这样是不会退化的,但我们可以直接每次 Delete 全部边,然后再 Return,于是可撤销并查集会寄,也只有这里会寄,于是可以讨论一下:
- Delete 后面并非 Return,直接暴力撤销。
- Delete 后面是 Return,我们可以通过前面记录以下当前有最大的 \(k\) 条边的答案即可快速回答。
然后就没了,对于这题,只能说 wssb。
代码。
本博客作者:Werner_Yin(https://www.cnblogs.com/werner-yin/) ,转载时请注明出处,谢谢支持!