Day 1, T1. 卡牌游戏

题意:有 nn 张牌,第 ii 张牌正面写着数字 aia_i,背面写着数字 bib_i,初始时正面向上。请你选择 mm 张牌翻面,使翻面后所有朝上的数字极差(最大值减最小值)最小。

m<n106m<n\le10^61ai,bi1091\le a_i,b_i\le10^9,保证所有 ai,bia_i,b_i 互不相同,ai<ai+1a_i<a_{i+1}

答案一定是翻牌的一个前缀和一个后缀,即牌 1l1\sim l 为背面,l+1r1l+1\sim r-1 为正面,rnr\sim n 为背面。

而且,最优解时一定不会出现 i[1,l],ai>bii\in[1,l],a_i>b_i。同理也不会有 i[r,n],ai<bii\in[r,n],a_i<b_i。这是因为翻前缀是要使最小值增大,翻后缀是要使最小值减小。

后面做法比较乱搞,也不会证明正确性。

枚举了 rr 单增时,发现 ll 也是单增的。具体策略是只要 al<mini=rn{bi}a_l<\min_{i=r}^n\{b_i\},则当前的 ll 取到最小值,必须 +1+1

这样会漏过一些解。再枚举 ll 单减,rr 同理也单减。所以像上面一样只要 ar>maxi=1l{bi}a_r>\max_{i=1}^l\{b_i\} 就让 r1r-1

用所有移动过程中的 l,rl,r 更新答案就正确了,并且通过了 UOJ 的所有 Hack 数据。正确性只会感性理解。

需要维护的东西只有 bb 序列的前后缀 min,max\min,\max,中间 aamin,max\min,\max 显然在两端。所以时间复杂度 O(n)O(n)


Day 1, T2. 矩阵游戏

题意:给你一个 (n1)×(m1)(n-1)\times(m-1) 的矩阵 bi,jb_{i,j},请你构造一个 n×mn\times m 的矩阵 ai,ja_{i,j},满足:

  • 0ai,j1060\le a_{i,j}\le10^6
  • bi,j=ai,j+ai,j+1+ai+1,j+ai+1,j+1b_{i,j}=a_{i,j}+a_{i,j+1}+a_{i+1,j}+a_{i+1,j+1}

输出任意方案,或判断无解。多组数据。

n,m300n,m\le300T10T\le10

构造一个只满足条件二的矩阵 aa 是容易的,考虑如何调整将现在这个矩阵 aa 使它满足条件一。调整时需要满足保持 aa 满足条件二。

由于条件二每个限制都是 2×22\times2 的小矩形,可以考虑将同一行 / 列的元素交错 ±x\pm x。设第 ii 行元素的 x=cix=c_i,第 ii 列元素的 x=dix=d_i

为满足不等式,建立差分约束系统。但可能存在这种情况:

[+c1+d1c1+d2+c2d1c2d2]\begin{bmatrix} +c_1+d_1&-c_1+d_2&\cdots\\ +c_2-d_1&-c_2-d_2&\cdots\\ \vdots&\vdots&\ddots \end{bmatrix}

差分约束时就出现了 0ai,j+ci+dj1060\le a_{i,j}+c_i+d_j\le10^6 这种东西,不方便处理。

可以再交错一下变成:

[+c1d1c1+d2c2+d1+c2d2]\begin{bmatrix} +c_1-d_1&-c_1+d_2&\cdots\\ -c_2+d_1&+c_2-d_2&\cdots\\ \vdots&\vdots&\ddots \end{bmatrix}

使得每个位置都出现了减号。

用 SPFA 跑最短路,出现负环则说明无解。时间复杂度 O(nm(n+m))O(nm(n+m))


Day 1, T3. 图函数

题意:给你一张有向图 GG,定义函数 f(u,G)f(u,G)

  1. 初始 cnt=0\text{cnt}=0,图 G=GG'=G
  2. 11nn 枚举点 vv。若 GG'uvu\rightarrow v 的路径和 vuv\rightarrow u 的路径都存在,则将 cnt+1\text{cnt}+1 并在 GG' 中删除点 vv 及其所有连边。
  3. 结束时 cnt\text{cnt} 即为函数值。

定义 h(G)=uVf(u,G)h(G)=\sum_{u\in V}f(u,G)。现给出 GG,请你分别求出 h(G)h(G),和删除第 ii 条边后的 h(Gi)h(G_i)

n1000n\le1000m2×105m\le2\times10^5,保证无重边自环。

观察性质,对 f(u,G)f(u,G) 的值有贡献的点 vv 肯定满足 vuv\le u,因为当 v=uv=uuu 会从图中删去。

删除操作难以实现。转化 uvu\rightarrow v 的路径和 vuv\rightarrow u 的路径都存在的条件,发现实际上是问 uvu\rightarrow vvuv\rightarrow u 是否能不经过 1v11\sim v-1 中的点。因为一旦经过了 1v11\sim v-1 中的点 xx,会使得 xx 存在 uxu\rightarrow xxux\rightarrow u 的路径,则 xx 一定会在 vv 之前被删去。

每个点对的贡献肯定是 h(Gi)h(G_i) 的一个前缀。可以求一下每个点对最晚贡献时间。

只走 vnv\sim n 中的点显然 Floyd。改一下传递闭包的写法,求一下最晚联通时间即可。

时间复杂度 O(n3)O(n^3)。足以通过了。

PS:STL 里的 min / max 是真的慢,改成手写才能过。


Day 2, T1. 宝石

题意:给你一棵 nn 个点的树,每个点上有第 wiw_i 种宝石,宝石共 mm 种。qq 次询问,每次询问从 uiu_i 出发沿最短路径到达 viv_i,途中按 P1,P2,PcP_1,P_2,\cdots P_c 的顺序收集宝石,即初始时定义变量 cnt=0\text{cnt}=0,对于途中的一个城市 xx(包括 ui,viu_i,v_i),若 wx=Pcnt+1w_x=P_{\text{cnt}+1},则将 cnt+1\text{cnt}+1,求最后的 cnt\text{cnt}

注意询问的 PP 序列是相同的。

n,q2×105n,q\le2\times10^5wi,cm5×104w_i,c\le m\le5\times10^4。保证所有 PiP_i 互不相同。

先考虑上行路径。采用倍增,我们希望从离出发点最近的拥有 P1P_1 的祖先开始,向上跳到最大的合法 cnt\text{cnt}

先定义一个 tPi=it_{P_i}=i。记 f(i,k)f(i,k) 表示 iiii 的祖先中离 ii 最近的能跳到的拥有宝石 Ptwi+2kP_{t_{w_i}+2^k} 的节点,g(i)g(i) 表示 iiii 的祖先中离 ii 最近的拥有宝石 P1P_1 的节点。所谓『能跳到』,是指 iji\sim j 中间必须出现 PtwiPtwjP_{t_{w_i}}\sim P_{t_{w_j}} 的所有宝石。

下行路径总是不好处理。考虑二分当前询问的答案 KK​,上下行路径就变得类似了。

注意下行路径中有一个查询 iiii 的祖先中离 ii 最近的能跳到的拥有宝石 PKP_K 的节点的操作,这个可以主席树,相当于 ii 到根路径上深度最大的 wj=PKw_j=P_K 的点 jj。所以上行路径的 g(i)g(i) 显然也可以直接用这个主席树解决。

时间复杂度大概是 O(nlogn+qlog2m)O(n\log n+q\log^2m)。这个算法是在线的。


Day 2, T2. 滚榜

f(S,x,y)f(S,x,y) 表示 SS 中队伍已上榜,最后一个上榜的队伍是 xx,且最多还剩 yy 道题目可分配的方案数。

f(S,x,y)=iSixf(S{i},i,y(nx+1)max{aiax+[i>x],0})f(S,x,y)=\sum_{i\in S\land i\ne x}f(S-\{i\},i,y-(n-x+1)\cdot\max\{a_i-a_x+[i>x],0\})

时间复杂度 O(2nn2m)O(2^nn^2m)


Day 2, T3. 支配

题意:给你一张 nn 个点 mm 条边的有向图,qq 次询问,每次询问加入边 (u,v)(u,v) 后受支配集改变的点的个数。询问独立。

n3000n\le3000m2nm\le2nq2×104q\le2\times10^4,保证 11 出发能到达所有点,图中无重边自环。

支配树可以暴力 O(n2)O(n^2) 地建出,即枚举删除每一个点 uu,从 11 出发无法到达的点被 uu 支配。

结论 1:加入边 (u,v)(u,v) 后,xx 的受支配集改变,当且仅当 xx 在支配树上的父亲 fax\text{fa}_x 的受支配集改变,或 fax\text{fa}_x 不再支配 xx

结论 2:加入边 (u,v)(u,v) 后,fax\text{fa}_x 不再支配 xx,当且仅当原图上删除点 fax\text{fa}_x 后,11 能到 uuvv 能到 xx

至此已有做法。在原图上预处理出 f(i,j)f(i,j) 表示删除 fai\text{fa}_i11 能否到达 jj,以及 g(i,j)g(i,j) 表示删除 fai\text{fa}_ijj 能否到达 ii。每次询问枚举所有点 xx,检查 fax\text{fa}_x 是否不再支配 xx;若不再支配,则其对答案的贡献为 xx 在支配树上的子树大小。

时间复杂度 O(n2+nq)O(n^2+nq)