1003
按照题意模拟即可,复杂度 O(1)。
1005
由于出现连续 k 个相等元素后它们就会消失,我们不妨认为消失的就是最靠左的 k 个元素。
考虑用栈维护这一操作,栈中存储这个元素的值和它的连续出现次数,一旦出现次数到达 k 就弹出。
这样维护的每一次删除操作都是合法的,并且最终所有的元素都不会出现连续 k 个。
这里还有一个问题,就是一个序列无论以何种顺序进行删除,最终的序列是否唯一?
考虑使用数学归纳法来证明,当长度 <k 时或不存在连续 k 个相等元素时显然成立。
假设序列 S 的第一步有两种不相同的删除:
-
若删除区间不相交,那么 S=AxkBykC,其中 B 可能为空,设 S1=ABykC,S2=AxkBC。
根据归纳假设,S1,S2 无论以何种顺序进行删除,最终的序列是唯一的。
那么 S1→ABC 是合法的,S2→ABC 也是合法的。
因此 S1 的最终态等于 ABC 的最终态;S2 的最终态也等于 ABC 的最终态。
-
若删除区间相交,这两个区间对应值必然相等,显然删除一步后到达的序列相等,那么根据归纳假设最终的序列是唯一的。
因此我们可以用开头提到的方法 O(n) 求出最终序列。
1007
枚举 A 在删除若干元素之后,长度为 m 的连续子段的最后一个位置 i。
那么在以 i 结尾、包含了 1∼m 的最小的区间之外,其它位置的元素都是没有必要被删除的。
因此这里的答案就是 mini{i−li+1−m},其中 li 是以 i 结尾、包含了 1∼m 的最小区间的左端点。
可以记录 1∼m 每一个元素最后一次出现的位置 p1∼pm,那么 li=min1≤j≤mpj。
可以用 set 支持动态增删查最小值,复杂度 O(nlogm)。
1002
预处理好一个骰子通过旋转能达到的状态,然后 BFS 即可,复杂度 O(Knm),其中 K 是骰子的状态数。
1009
设给定的 m 个无向边是特殊边,假设一条路径依次经过了 e1,e2,…,ek,其中 ei=(xi,yi,wi)。
我们总可以认为 a⇝b 不经过特殊边的权值是 a⊕b:
- 当 a=b 时,权值是 0;
- 当 a=b 时,假设 a⇝b 的路径是 (v1,v2,…,vp),其中 v1=a,vp=b,那么权值是 (v1⊕v2)⊕(v2⊕v3)⊕⋯⊕(vp−1⊕vp)=a⊕b。
所以这个路径最终的权值是 1⊕(x1⊕w1⊕y1)⊕(x2⊕w2⊕y2)⋯⊕yk⊕n=1⊕n⊕(⨁i=1k(xi⊕wi⊕yi))。
由于无论以何种顺序经过任意的特殊边,总是存在路径的,于是我们把 xi⊕wi⊕yi 均插入线性基,查询这个线性基中元素与 1⊕n 异或的最大值即可,复杂度 O(nlogV)。
1004
求两点 S,T 不经过凸包的最短路径,可以认为一定要走这个凸包和 S,T 构成的新凸包上的边,如果 S,T 其中一个点不在这个新凸包上,说明 ST 不与凸包相交,答案就是 ∣ST∣;否则,求出 S⇝T 的顺时针和逆时针长度即可,参考类似题目 CCPC 2021 Guangzhou L。
复杂度 O(QlogN)。
1008
这是一个结论,类似地结论也在 CF141E 中出现,即对于一个 0,1 边权的无向连通图,定义生成树的权值是边权之和,那么权值为最小生成树和最大生成树之间的生成树都是存在的,特判不连通情况。
下面给出一个证明:
假设存在两个生成树的边集是 A,B,设 w(A) 表示 A 的边权之和,考察 A∖B:
-
若 A∖B=∅,说明 ∀x∈A,x∈B,那么 A⊆B;又因为 ∣A∣=∣B∣ 所以 A=B。
-
否则,设 e∈A∖B,将 e 加入 B 后一定恰好形成一个简单环。
设这个环上的边为 C,既然 e∈A,一定 ∃c∈C,c=e,c∈A,否则 A 中存在环。
那么选出一个这样的 c,将 e 加入 B 后将 c 删掉,形成的 B′ 仍然是一个合法的生成树,A∖B′ 中严格减少了一个元素。
重复这样的过程,一定可以从 B 到达 A,而每一次都是加入一条边、删除一条边,所以 w(B′)−w(B)=wc−we∈{−1,0,1}。
既然每一个变化的绝对值最大是 1,那么在整数意义下是连续变化的,因此权值为最小生成树和最大生成树之间的生成树都存在。
因此只需要求出最小和最大生成树即可,复杂度 O(nlogn)。
1006
先给出一个结论,如果存在一个合法的括号路径,那么合法的最短路径的长度不会超过 4n。
把左括号看成 +1,右括号看成 −1,那么一个合法的括号路径是边权前缀和均非负,且边权和为 0 的路径。
既然最短路径长度 ≤4n,那么 +1 的边 ≤2n,于是前缀和的最大值 ≤2n。
因此可以把前缀和与点绑定,建一个分层图,那么这个图中有 O(n2) 个点,O(nm) 条边,由于 n,m 数量级相同,认为一次 BFS 是 O(n2) 的,那么对 n 个点进行 BFS 是 O(n3) 的。
只需要预处理出答案后对每个询问 O(1) 回答即可。
如何证明?考虑构造出一条长度不超过 4n 的合法路径。
若 a⇝b 的合法路径存在,那么 a 一定有一条 +1 的邻边,b 一定有一条 −1 的邻边。否则,a 如何走都是 −1,或者必须经过 +1 到 b 才让边权和为零,则最后一步的前缀和是 −1,都是不合法的情况。
除此之外,a⇝b 的合法路径 W 存在,这个合法路径的边数一定是偶数:因为 +1 和 −1 的边数相等。
既然存在一个偶数路径,就可以把每一个点 u 拆成 u0 和 u1,那么起点是 a0,终点是 b0,要求中间每一条边都必须从 u0→v1 或者 u1→v0。
在这个新的图中,我们把 W 的环都删掉,这样这个路径剩下的点 ≤2n,那么边 ≤2n−1,并且保证边数仍然为偶数,那么边数 ≤2n−1。
记处理之后的路径为 W′,边权前缀和为 S0,S1,…,Sk,并且 S0=Sk=0,k 是路径的边数,是偶数,并且 k≤2n−2。
既然 a 一定有一条 +1 的邻边,那么我们可以先让 a 反复走这一条边 x=2⌈−min2Si⌉ 次,这样能够保证路径每一个前缀和非负;并且让结束之前反复走 −1 的邻边,那么就可以让最后反复走 y=x+Sk 次, 保证最后的边权和为 0。
那么这个新路径 W′′ 的长度是 x+y+k=4⌈−min2Si⌉+Sk+k≤k+2+Sk−2minSi。
因为 Sk−minSi+0−minSi≤(k−j)+j=k,其中 j 是 Si 取到最小值的下标。
于是长度 ≤2k+2≤4n−2,也就是说,我们构造出了一个长度 ≤4n−2 的合法路径,这证明了开头的结论。
1010
本题核心思路是利用 χs(x)=(−1)popcnt(s∧x) 的性质,下设 W=2m,并且所有值都在 [0,W)∩Z 中。
-
W1∑s=0W−1χs(x)=[x=0]
证明如下:
-
当 x=0 时,(−1)0=1 恒成立,因此这个式子等于 1;
-
当 x=0 时,只看 x 的二进制位为 1 的那些位,设有 y 个。把其余位相同的放到同一组来求和,那么共有 2m−y 组。
W1s=0∑W−1χs(x)=2m−yW1i=0∑y(−1)i(iy)=0
-
∀0≤x,y<W,χs(x⊕y)=χs(x)χs(y)
证明如下:
设 x0,x1,…,xm−1 是 x 的每一个二进制位 y0,y1,…,ym−1 是 y 的每一个二进制位。
根据定义有 χs(x)=∏i=0m−1χs(2ixi),并且 χs(0)=1,χs(2i)=(−1)[si=1]。
考虑 χs(xi)χs(yi),若 xi=yi,那么 χs(xi)χs(yi)=1;否则,必然有一个 1 一个 0,那么 χs(xi)χs(yi)=(−1)[si=1]。
因此 χs(x⊕y)=χs(x)χs(y)。
设 nk 是在 1∼n 中无顺序选 k 个数组成的所有集合,那么可以化简目标式:
I∈nk∑[i∈I⨁ai=0]=I∈nk∑W1s=0∑W−1χs(i∈I⨁ai)=W1s=0∑W−1(I∈nk∑i∈I∏χs(ai))
对于 n 个元素无序选择 k 个,并把对应权值乘起来再相加,这与形式幂级数关系很大,所以往这方面考虑:
W1s=0∑W−1(I∈nk∑i∈I∏χs(ai))=W1s=0∑W−1[zk](i=1∏n(1+χs(ai)z))
由于 χs(x) 的值只有 1 和 −1,所以关键问题就是如何求出 1 和 −1 的数量,设为 ps,qs。
显然有 ps+qs=n,那么只需要考虑再找到一个方程。
由于 ps−qs=∑i=1nχs(ai)=∑j=0W−1cjχs(j),其中 cj 表示 j 在 a1∼an 中的出现次数,那么所有的 ps−qs 可以通过对 c 进行一次 FWT 在 O(WlogW) 求出。
所以可以对式子进行进一步转化:
W1s=0∑W−1[zk](i=1∏n(1+χs(ai)z))=W1s=0∑W−1[zk](1+z)ps(1−z)qs=W1s=0∑W−1i=0∑k(ips)(k−iqs)(−1)k−i
这是可以 O(kW) 求出的。
1001
首先,把连通块看成一个点,那么就是需要把这 n−m 个连通块用 n−m−1 条边连起来。
对于一个连通块来说,全局树的直径要么一个连通块内部的距离,要么是两个连通块之间的点的距离。
如果是两个连通块之间的点,考虑如下的方案:对于每一个连通块,我们只选择使得 maxudu,v 最小的 v,并且设这个连通块 i 的半径为这个值,记做 ri。
这样做有两个好处,首先,它能让两个连通块之间的点这一路径的两端极端情况最好;其次,它能让中间经过的别的连通块不会产生除了我们添加的边以外的贡献。
所以这个方案是一定比其它方案更优的,但是到这一步仍然没有办法继续做下去。
取 ri 最大的 i 为根,记作 1,观察这个缩点之后的树的形态,设每一个点到父亲的边边权为 pi。
对于这个树的任意两个点 u,v:
- 如果是 u 是 v 的祖先,那么 u,v 对答案的贡献 cu,v=ru+rv+du,v≤rv+r1+du,1,所以 u,v 一定不优于 u,1 的贡献。
- 如果 v 是 u 的祖先情况也类似;
- 如果都不是,那么 cu,v=ru+rv+du,v≥ru+rv+pu+pv。
综上,我们可以认为根为 1 的菊花图总是比其它形态的树更优,因为菊花图能够保证 u,1 的贡献更小,并且任意两个非根点的贡献也更小。
那么现在的问题就变成了,给定 r1,r2,…,rk,其中 k≥2 并且 r1=max1≤i≤kri。
我们需要分配一个正整数序列 p2,…,pk 满足 ∑i=2kpi≥S 并且 max{D0,pi+ri+r1,pi+pj+ri+rj} 最小,其中 D0 是原连通块内部的点的最大距离。
考虑二分答案 M,那么我们只需要求出当 ∀2≤i≤k,pi+ri+r1≤M, ∀2≤i=j≤k,pi+pj+ri+rj≤M,∀2≤i≤k,pi≥1 同时成立时,∑i=2kpi 的最大值即可。
为了方便,我们令 wi=pi+ri,由于 ri 是定值,所以 ∑pi 最大当且仅当 ∑wi 最大。
-
若 2(M−r1)≤M,等价于 r1≥⌈M/2⌉说明所有的 wi 都可以取到第一个限制的上界,那么就让它取到;
-
否则,有 r1<⌈M/2⌉,如果有 k≥3 的话,就应该考虑第二个限制。
第二个限制实际上只关系 w 的最大值和次大值,所以我们可以认为有一个最大值,其余 k−1 个均为次大值,这样既能让 ∑wi 变大,也能尽可能满足 wi≥pi+1 的限制。
考虑到最大值减小 1,次大值增加 1,∑i=1kwi 一定不会减小,并且 wi≥pi+1 的限制除了最大值以外都会变宽,所以能减小一定会尽量减小。
也就是说,w 的最大值 w1 最终会减小到 max{⌈M/2⌉,r1+1},次大值自然就是 M−w1。
如果这样都无法满足所有 wi≥pi+1 的限制,说明别的情况更不可能满足限制,直接报告无解。
所以综合下来前面预处理 r 的值复杂度 O(n),后面二分答案并检查是 O(logV) 的。