NOIP 前做题

CF1439B Graph Subset Problem

对于二可以用一个经典的求 k-core 的算法,每次拓扑删除那些度数小的点。然后到了 (k) 的时候我们就直接看一下是不是全部被删光了即可。

关于第一个求团。我们发现一个大小为 (k) 的团在不存在 k-core 的情况,这些点都必然是 (k-1)-core 中的点。于是我们对于每个在求 (k-1) 的时候求出来的点遍历它所有连接的点,然后判断是否是团。这个单次操作是 (O(k^2)) 的。

但是,实际上 k-core 点的个数是 (O(m/k)) 的级别的,这意味着求团的复杂度为 (O(mk))。然后,团的边数应该在 (O(k^2)=O(m)),也就是说复杂度是 (O(msqrt{m}))

具体操作时,我们维护一下 deg,然后用 unordered_map 作邻接矩阵。本人曾经使用过 unordered_set 来代替 vector 和 deg 存邻接表,然后被卡常死了。然后数据中还存在卡 unordered_map 的数据……

https://codeforces.com/contest/1439/submission/131558660

CF1340D Nastya and Time Machine

考虑其欧拉环游序。每一次一个点出现,它必然是不同的时间。可以得到理论下界为 (D=max deg(u))。实际上这个下界可以达到。考虑钦定每个点出来的时间是进来的时间 -1。这是可以构造完成的。遍历的时候,如果一个点加到 (D),就穿越到 (D-deg(u))

https://codeforces.com/contest/1340/submission/131561302

CERC2014 Outer space invaders

时间离散化,然后对时间做区间 DP。考虑一个区间 (f(l,r)) 的全部被杀死的方法。容易知道这个区间中距离最远的一定被直接带走。(注意,一定是被完全包含的那一个,否则会被更大的区间统计到)所以我们枚举带走他的时间。

https://codeforces.com/gym/100543/submission/131607895

CERC2017 Justified Jungle

存在 (k) 的解相当于子树大小为 (frac{n}{k+1}) 倍数的个数为 (k+1)。于是对于一个子树我们更新即可。

https://codeforces.com/gym/101620/submission/131608594

COCI2019.12 Sob

首先题面说了对于任意 (n,m) 都可实现,所以考虑递归求解。

找到 (A) 中最大的数,设其为 (u);我们暴力找到 (B) (设其为区间 ([l,r]) ) 中最小的 (v) 与其匹配。可以证明,(B)([l,v])(A)([u-v+l,u]) 区间都能一一顺次匹配。于是就能转化为更小规模的问题了。

https://loj.ac/s/1271785

AGC043B 123 Triangle

很人类智慧。首先全体 -1,这样保证数字都在 0~2 之内。

然后首先 (0) 对答案没有影响。看 (1,2)

考虑设一个数的被计算次数为 (c_i),表示这个数在运算中出现了多少次(算正负)。

  • (1) 算了奇数次:那么答案必然为 (1) (必然为奇数)。
  • (1) 算了偶数次:那么答案为 (0)
  • (1) 没有出现且 (2) 算了奇数次:那么答案为 (2)(加减偶数次的话变化一定是 (4) 的倍数,也就是加减 4,所以为 (2))。
  • (1) 没有出现且 (2) 算了奇数次:那么答案为 (0)

至于如何算出现次数,第 (i) 位会被算 (inom{n-1}{i-1}) 次。(inom{n}{m}equiv 1 pmod 2) 的充要调键位 (n&m=m)

https://atcoder.jp/contests/agc043/submissions/26519645

CF1322B

考虑影响第 (k) 取值的东西。考虑 (b_i=a_i\%2^{k+1}),则 (a_i+a_i) 在第 (k) 位为 (1) 当且仅当他们的和 (in [2^k,2^{k+1}-1]cup [2^k+2^{k+1},2^{k+2}-2])。two-pointers 扫一下即可。注意数对无序所以/2。

https://codeforces.com/contest/1322/submission/131726261

CF1379C

有种被 div2 反杀的奇怪感觉……

首先显然一定是一堆同样 (b) 加上一些 (a) 的形式。那么枚举这个 (b) 是啥,然后看 (a) 选哪几个即可。二分出比 (b) 大的最小的 (a)

https://codeforces.com/contest/1379/submission/131731985

CF1410F

一开始看错题了……不过无论有没有看错题这题都挺简单的。

维护一棵线段树。设一个点的高度为这个点的区间长度对 (2) 取对数(叶节点深度 (0) 其他为子节点深度 (+1))。然后每个点维护一串标记,(t_{u,i}) 表示 (u) 子树中高度为 (i) 的点需不需要交换自己的两个子节点。这个标记是容易执行容易下放的。复杂度 (O(nlog n+qlog^2n))

HAOI2015 树上操作

打个树剖板子。

https://loj.ac/s/1278245
https://codeforces.com/contest/1401/submission/131737140

BJOI2015 骑士的旅行

树剖+线段树,线段树中维护线段树上区间前 20 大,由于一个点会有很多骑士,于是线段树的叶节点同时维护一个 multiset 记录该节点所代表的节点上的骑士,然后到叶节点的时候根据该 multiset 暴力重构叶节点的前 20 大即可。

https://hydro.ac/d/bzoj/record/616a5d40cf7da6892ab4b4ce

SCOI2005 王室联邦

按照 (B) 的块的大小先给树分块。考虑对于一个子树的根节点,它要连接一些子树并作为其省会。容易发现这样的话最大的省的大小 (<3B)

https://loj.ac/s/1275180

LOJ113 最大异或和(线性基板子)

注意 1ll!!!

https://loj.ac/s/1278251

HAOI2015 树上操作(树剖线段树板子)

https://loj.ac/s/1278245

LOJ103 子串查找(KMP 板子)

https://loj.ac/s/1278263

LG5357 AC自动机(AC自动机 板子)

快读一定要注意在读入前排掉非合法字符!!!

https://www.luogu.com.cn/record/60435071

LG3834 主席树(主席树板子)

注意叶子结点也需要连历史版本的边!!!

https://www.luogu.com.cn/record/60445307

LOJ124 除数函数求和(线性筛板子)

[sum_{i=1}^{n} sum_{d|n} d^k=sum_{d=1}^{n} lfloor frac{n}{d} floor ]

线性筛自然数幂即可。

https://loj.ac/s/1278662

LOJ125 除数函数求和2(数论分块板子)

[sum_{i=1}^{n} sum_{d|n} 2d^2+3d+5=sum_{d=1}^{n} lfloor frac{n}{d} floor (2d^2+3d+5) ]

区间的 (2sum d^2)(3sum d)(5sum 1) 是好算的,上数论分块。

https://loj.ac/s/1278686

原文地址:https://www.cnblogs.com/TetrisCandy/p/15396032.html