闲扯
昨年的 $NOIP$ 试题,今天又重新考了一次,结果 $D1T3,D2T1$ 全都出锅了。。。
$D1T1$
Solution
原题。
考虑贪心,如果 $val_i<=val_{i-1}$ ,那么我们一定可以在操作 $i-1$ 的时候顺带着操作掉,所要我们只需要对 $val_i>val_{i-1}$ 的加入 $val_i-val_{i-1}$ 的贡献即可。
Code
1 |
|
$D1T2$
Solution
我们将数组排个序,然后挨个加入。
如果当前面值能被前面的表示出来,那么我们就忽略掉,否则加入最后的答案中,并且并入当前的背包。
排序是为了保证每一个数尽可能的能被前面的表示出来。
Code
1 |
|
$D1T3$
Solution
求最小的最大,考虑二分答案。
左边界为 $0$ ,右边界不能直接选择将所有的边权加上,而是选择树的直径或者是 $\frac{sum}{k}$ 。
考虑怎么判断合法。
发现每个子树只能传一条边上去,我们把所有能单独成立的边和能配对边删去后,传一个最大值上去即可。
注意配对要在所有的子树都遍历之后,最后来计算,每次找最小的满足条件的即可。
Code
1 |
|
$D2T1$
对于 $m=n-1$ 的情况,我们直接贪心的走即可。
对于 $m=n$ 的情况,我们有两种做法。
- 因为数据范围小,所以我们直接 $O(n^2)$ 枚举删掉那条边,然后找一个最小的答案即可。
- 存在环的情况可以对环上的点有一次反悔的机会,所以我们讨论一下,看是否需要,什么时候反悔即可。
Code
1 |
|
$D2T2$
打表,找到了 $n=2$ 的规律,然后走人,拿到了 $50pts$ 的好成绩。
Code
1 |
|
Solution
1 |
|
$D2T3$
Solution
有一种 $n\log n$ 的倍增做法,不过没看懂(没看),所以学了一下动态 $DP$ ,然后就可以直接上模板了。
我们有最小权覆盖集 $=$ 全集 $-$ 最大权独立集。
所以我们按照模板题只需要求出最大权独立集,然后减一下即可。
对于强制要求选的点,我们将权值加上 $-INF$ ,这样最大权独立集一定不会选这个点;同理,我们将强制要求不选的点权值加上 $INF$ ,这样最大权独立集一定会选它。
不过直接先树剖的复杂度是 $O(n\log^2n)$ ,可能会被卡常。
可以用全局平衡二叉树或者 $LCT$ 优化成 $O(n\log n)$ ,但是这两个都还没学过,就暂时不管了。
Code
1 |
|