ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

APIO2021

2022-04-22 16:34:38  阅读:157  来源: 互联网

标签:log 复杂度 矩阵 times leq APIO2021 单调


Day1

决策单调性与四边形不等式-彭思进

5.19 18:30-21:00

一、定义与约定

  1. 题目中若没有明确给出,则可以认为所有 \(n\times m\) 或者 \(n\times n\) 的矩阵都可以 \(O(n)\) 预处理,\(O(1)\) 计算某个元素的值。
  2. 用 \(\min_i(A)\) 表示矩阵 \(A\) 的第 \(i\) 行的最小值在哪一位取到(相同的话取最左边的)。
  3. 定义一个 \(n\times m\) 的矩阵 \(A\) 为单调矩阵,当且仅当对于任意 \(1\leq i<j\leq n\),\(\min_i(A)\leq \min_j(A)\)。
  4. 定义一个 \(n\times m\) 的矩阵 \(A\) 的子矩阵为 \(A_{l_1\ldots r_1,l_2\ldots r_2}\),其中 \(1\leq l_1\leq r_1\leq n,1\leq l_2\leq r_2\leq m\)。
  5. 定义一个 \(n\times m\) 的矩阵 \(A\) 为完全单调矩阵,当且仅当 \(A\) 的每个子矩阵都是单调矩阵。

二、四边形不等式

(1)定义

称一个矩阵 \(A\) 满足四边形不等式(或称作蒙日阵),当且仅当对于任意 \(1\leq i_1\leq i_2\leq n,1\leq j_1\leq j_2\leq m\),有 \(A_{i_1,j_1}+A_{i_2,j_2}\leq A_{i_1,j_2}+A_{i_2,j_1}\)。

(2)定理一

若 \(A\) 满足四边形不等式,则 \(A\) 与 \(A^T\) (\(A\) 的转置)都是完全单调矩阵。

引理:若 \(A\) 满足四边形不等式,则对 \(A\) 的任意一行或一列加入一个常数 \(c\),其仍然满足四边形不等式。

(3)应用一

对于一个动态规划方程 \(f_{i,j}=\min_{1\leq k<j} f_{i-1,k}+w_{k,j}\),考虑从 \(f_{i-1}\) 转移到 \(f_i\) 的过程可以构造一个矩阵 \(A\),使得

\[A_{x,y}=\left\{ \begin{aligned} f_{i-1,y}+w_{y,x} &,x>y\\ \infty&,x\leq y \end{aligned} \right.\]

则 \(f_{i,x}=A_{x,\min_x(A)}\)。

对于这种,要求满足 \(f_i\) 只需要知道 \(f_{i-1}\) 的方程的问题称为满足离线决策单调性。

(4)应用二

对于动态规划方程 \(f_i=\min_{1\leq j<i}f_j+w_{j,i}\),可以类似地构造一个矩阵 \(A\),使得

\[A_{x,y}=\left\{ \begin{aligned} f_y+w_{y,x}&,x>y\\ \infty&,x\leq y \end{aligned} \right.\]

但是在这个问题中,可以发现,想要求出 \(f_i\) 的值,必须要知道 \(f_{1\ldots i-1}\)。这样的问题成为满足在线决策单调性。

(5)算法一:暴力分治

设 \(solve(l,r,L,R)\) 表示当前计算 \(l\) 至 \(r\) 行,这些行的最小值在 \(L\) 至 \(R\) 列中。暴力枚举第 \(mid\) 行,求出 \(\min_{mid}(A)\),这样可以把原问题化为两个子问题 \(solve(l,mid,L,\min_{mid}(A))\) 与 \(solve(mid+1,r,\min_{mid}(A),R)\)。

考虑这样分治的复杂度,每一列至多会被扫分治深度次,故复杂度为 \(O(m\log n+n)\)。这个算法可以解决单调矩阵的问题,而单调矩阵求解的下界复杂度即为 \(O(m\log n)\)。下面将会继续探讨求解完全单调矩阵问题的算法。

例一 北大集训2018Day3T3 小Z的旅行计划

设 \(val_{i,j}\) 为选择 \(i\) 到 \(j\) 的答案,由 \(val_{i,j}+val_{i+1,j+1}\geq val_{i+1,j}+val_{i,j+1}\) 和求最大值想到可以把边权全部取反,这样就满足了四边形不等式。而 \(val_{i,j}\) 可以通过 \(\operatorname{set}\) 动态维护 \(\{p_i,\ldots,p_j\}\) 的dfs序来 \(O(\log n)\) 得出,直接运用上边的方法可以 \(O(kn \log^2 n)\) 解决问题。

(6)算法二:二分栈

首先探讨完全单调矩阵的性质:

性质一 对于任意两列 \(1\leq i<j\leq m\),一定存在一个位置 \(p_{i,j}\),使得对于所有的 \(1\leq k\leq p_{i,j}\),有 \(A_{k,i}<A_{k,j}\);对于所有的 \(p_{i,j}<k\leq n\),有 \(A_{k,i}\geq A_{k,j}\)。

性质二 由性质一可以得出,\(A_{1\ldots p_{i,j},j}\) 和 \(A_{p_{i,j}+1\ldots n,i}\) 都一定不可能是最优的,称其为“冗余”的。

通过上面两个性质,可以得到,如果现在考虑每一列,那么每一列应该都会占据一段区间,并且列从左到右占据的区间应该也是从上到下,并且不交的。于是可以想到开一个栈来存储这个东西,加入新的一列 \(k\) 时,暴力找栈顶的列 \(t\) 占领的区间最上端 \(l_t\),如果 \(A_{l_t,t}\geq A_{l_t,k}\),那么 \(t\) 这整个一列都会冗余,直接删除。一直弹栈直到栈空或者找到一个 \(t\) 使得 \(A_{l_t,t}<A_{l_t,k}\),那么可以在这个 \(t\) 的区域 \([l_t,r_t]\) 中二分找到 \(p_{t,k}\),从而确定 \(k\) 列占领的区间,入栈。

考虑这个算法的复杂度:每列都至多会被入栈出栈一次,每列入栈的时候至多会二分一次。所以复杂度是 \(O(m\log n)\) 的。

(7)算法三:SMAWK算法

首先是这样一个操作 reduce(A),它表示对一个 \(n\times m\) 的矩阵进行如下操作之后,变为一个 \(n\times \min(n,m)\) 的矩阵:

维护一个 \(k\times k\) 的子矩阵,其中对角线元素 \(A_{i,i}\) 以上的所有元素都是冗余的。如果现在已经维护了一个这样的矩阵,考虑加入第 \(k+1\) 列:

如果 \(A_{k,k}\geq A_{k,k+1}\),则第 \(k\) 列冗余,直接删除;如果 \(A_{k,k}<A_{k,k+1}\),那么如果 \(k+1\leq n\),把后面那一列加入。

SMAWK算法的分治过程是这样的:

对于 SMAWK(A)

  1. 计算 B=reduce(A),C=B 的所有偶数行组成的子矩阵;
  2. 递归计算 SMAWK(C)
  3. 通过计算出来的偶数行答案去暴力计算奇数行答案,这一步复杂度大概是 \(O(m)\)。

考虑整个算法的时间复杂度递推式 \(f\) 是

\[f(n,m)=\left\{ \begin{aligned} f(\frac{n}2,n)+O(n+m)&,n\leq m\\ f(\frac{n}2,m)+O(n+m)&,n>m\\ \end{aligned} \right. \]

当 \(n>m\) 时,递归 \(\log \frac{n}{m}\) 次会进入 \(n\leq m\) 的情况,上面的情况是 \(O(n+m)\),所以总的时间复杂度是 \(O(m(1+\log \frac{n}{m})+n)\)。

三、二维决策单调性

(1)例一:石子合并

简单的区间dp,递推式为

\[f_{i,j}=\left\{ \begin{aligned} 0&,i>j\\ w_{i,j}+\min_{i\leq k<j}f_{i,k}+f_{k+1,j}&,i\leq j \end{aligned} \right.\]

朴素的计算是 \(O(n^3)\) 的,现在考虑利用决策单调性来优化这个过程。

(2)朴素二维动态规划的决策单调性优化

定理一:上式中 \(\{w_{i,j}\}\) 满足四边形不等式,且 \(w_{i,j}\) 满足区间单调性,则 \(\{f_{i,j}\}\) 也满足四边形不等式。

证明需要归纳法,先归纳证明 \(i'=j\) 时的三角形不等式,再归纳证明四边形情况下的不等式。

定理二:设 \(f_{i,j}\) 最小的最优决策点为 \(K_{i,j}\),则有 \(K_{i-1,j}\leq K_{i,j}\leq K_{i,j+1}\)。

如果两维都满足单调性,那么对于区间长度相同的区间都可以 \(O(n)\) 计算,总复杂度 \(O(n^2)\),并且拥有较小常数。

四、决策单调性最短路问题

(1)例二:环上邮局 NFLSOJ216(IOI2000邮局 加强版)

做法一:枚举每个位置断环成链,暴力 \(O(n^2k)\)。

通过上面的暴力做法,可以发现,最优方案一定会把这 \(n\) 个物品划分成 \(P\) 个区间,每个区间去同一个邮局,处理一下前缀和就可以 \(O(1)\) 求了。

定理(答案凸性) 设 \(f(k)\) 表示 \(1\ldots n\) 经过 \(k\) 条边的最短路,则其为下凸函数。

引理 对于任意 \(1\leq s<r<t\leq n-1\),都有 \(f(s)+f(t)\geq f(r)+f(s+t-r)\)。

证明大概是对于任意的 \(s,r,t\) 构造一组特解满足?然后证明引理之后带个数进去就可以证明定理了。

这样可以考虑 wqs 二分,大概是二分一个斜率去找切点?直接做可以做到 \(O(n^2 \log V)\)。

另外两个定理:

路径单调性定理:若存在决策单调性,设经过 \(k\) 条边字典序最小的最短路的边集为 \(f(p)\),若两条路径的起点和终点 \(s_1<s_2,t_1<t_2\),则经过的点 \(s_i,t_i\) 都有单调性,即 \(s_i<t_i\)。

路径不交定理:起点和终点均为 \(1\) 和 \(n\) 的路径,\(f(p)\) 与 \(f(p+1)\) 的路径不交,即 \(f(p+1)_i< f(p)_i\leq f(p+1)_{i+1}\)。

运用上述定理可以先把例二中的村庄分成 \(k\) 个区间,找一个最小的区间仅枚举这个区间的位置断环成链,复杂度 \(O(nk\times \frac{n}{k})=O(n^2)\)。

再次考虑分治 \(solve(l_1,r_1,\ldots,l_k,r_k)\),每一层跑一个 Wilber 或者 SMAWK 算法或者二分栈和分治,并且每次把最小的区间转到最前面做,复杂度 \(O(n(\log n+\log V))\) 或 \(O(n\log n(\log n+\log V))\)。

五、四边形不等式的其他应用

(1)生成随机蒙日阵

如果 \(C,D\) 是蒙日阵,则 \(C+D,\lambda C,C^T\) 都是蒙日阵。故可以找几个常见蒙日阵,随机运算一下就差不多了。

还有另外一个方法是使用次模函数构造蒙日阵。次模函数的定义是:设 \(E\) 是一个有限集合,定义在幂集 \(2^E\) 的实函数 \(f\),对于任意的 \(X,Y\in E\),均满足 \(f(X)+f(Y)\geq f(X\cap Y)+f(X\cup Y)\),则 \(f\) 为次模函数。

后面还有一些使用决策单调性解决旅行商问题的讲解???反正彻底下线啦。

Day 2

Open Cup 趣题选讲-蒋凌宇

2021.5.20 18:30-21:00

一、Open Cup简介

Open Cup是对世界各地举行的一些质量比较高的算法竞赛的题目的收集。比如 Pretrozavodsk Camp,EC-Final,Moscow Workshop,还有一些不太知名的比赛的题。整体难度较大,申请账号门槛高,但是可以在 codeforces 上一位名叫 zimpha 的人的博客里看题。

二、题目选讲

T1 Cactus Competition

XXI Open Cup.Grand Prix of Korea,Problem B

题意:给定一张 \(n\times m\) 的网格图,\((i,j)\) 的权值为 \(A_i+B_j\),其中 \(A,B\) 都是给定的序列。求有多少对 \((S,T)(1\leq S\leq T\leq n)\),满足存在一条 \((S,1)\) 到 \((T,m)\) 的路径,每一步只能向下或向右走一步,并且只能经过权值非负的格子。

\(n,m\leq 2\times 10^5,|A_i,B_i|\leq 10^9\);\(1024M,2s\)。

题解:首先考虑 \(1-n\) 的情况。如果以下条件都不满足,则一定存在路径:

  1. 有一行不能走。即存在 \(1\leq i\leq n\),对于任意 \(1\leq j\leq m\),都有 \(A_i+B_j<0\);
  2. 有一列不能走,式子与上边类似。
  3. 有一个不能走的框把起点框起来了。即存在\(1\leq x\leq n,1\leq y\leq m\),使得对于任意 \(1\leq i<x\) 都有 \(A_i+B_y<0\),且对于任意 \(1\leq i<y\) 都有 \(A_x+B_i<0\)。
  4. 有一个不能走的框把终点框起来了。式子与3类似。

证明充要的方法大概是,构造一个从起点走到终点的路径。先选择一个中间点,然后分别对两个子问题进行考虑,用第 \(3\) 和第 \(4\) 个性质反证子问题一定成立,则结论一定成立。

接下来考虑四个性质对 \((S,T)\) 的影响,前两个性质就是把大问题分成两个子问题。后两个性质的影响可以用单调栈+二分求出,最后的复杂度是 \(O(n\log n+m)\)。

T2 Query On A Tree 17

XXI Open Cup.Grand Prix of Korea,Problem I

题意:给一个 \(n\) 个点的有根树,初始点权为 \(0\)。有 \(q\) 次操作,每次会将某个点 \(u\) 子树内所有顶点点权 \(+1\) 或者将 \(u\) 到 \(v\) 路径上点权 \(+1\),求一个点 \(v\) 使得 \(\sum_{1\leq u\leq n}A_u\cdot dis(u,v)\) 最小。

题解:若点权和为 \(S\),则最浅的带权重心的子树点权和一定大于 \(\frac{S}2\)。所以如果将所有顶点按照dfs序写下来,每个点写这个点的点权次,那么这个序列的最中间的点一定在答案点的子树中。于是可以用重链剖分加线段树来维护点权和,注意到重链剖分也是一个dfs序,于是每次查询可以在线段树上二分找到中间点,然后直接在这个点到根节点的路径上找最优点就行,这个过程可以用倍增解决。每一次可以 \(check\) 一下这个点要不要跳,具体方式大概是在线段树上查子树和一类。这样做总复杂度是 \(O(n+q\log^2 n)\)。

T3 Steel Slizing 2

XXI Open Cup.Grand Prix of Korea,Problem L

题意:平面上有一个多边形,长度为 \(n\),第 \(i\) 个位置的高度为 \(h_i\)。需要切最少的次数使每个部分都是矩形。切的每一刀只能跟多边形有两个交点,并且在多边形内部。切掉之后的图形不能一起切。\(n\leq 2.5\times 10^5\)。

题解:最后每一块都是矩形相当于是凹顶点(\(270\) 度的顶点)个数为 \(0\)。切一次只会把凹顶点数目 \(-1\) 或者 \(-2\),问题转化为最大化 \(-2\) 次数。

竖着的情况可以直接求,如果上下都是凹顶点就行。横着的情况相当于是需要满足两个位置的横坐标相等,且这两个位置中间的任何位置都比它们要高。这个问题大概可以用笛卡尔树求得。

现在得到了一些横着和竖着的边。如果有两条边相交,那么它们只能选一个,这是一个二分图最大独立集问题,它等于边数减去最大匹配。考虑到这个题的边有特殊性质,横着的一定是向一个区间连边。这时候不要直接线段树优化建图跑网络流啊……可以直接跑一个贪心的类似区间覆盖的东西,用堆维护一下。复杂度 \(O(n\log n)\)。

T4 Interesting Drug

XXI Open Cup.Grand Prix of Korea,Problem K

题意:有 \(n\) 件物品排成一行,一个人可以左右移动,走到了一个地方,如果有物品就会拿。对于第 \(i\) 个物品,如果这个人第 \(C_i\) 个取走它,会得到\(D_i\) 的收益,否则没有任何收益。对于每个 \(1\leq i\leq n\),求初始位置为 \(i\) 时能够取得的最大收益。\(n\leq 3\times 10^5,1\leq D_i\leq 10^9\)。

题解:倒过来考虑,记 \((L,R)\) 表示现在拿了 \([L,R]\) 的物品。此时需要扔掉位置为 \(L\) 或 \(R\) 的物品,最后就到 \((i,i)\),这样复杂度是 \(O(n^2)\)。考虑有贡献的边只有 \((i,i+C_i-1)\rightarrow (i+1,i+C_i-1)\) 和 \((i-C_i+1,i)\rightarrow (i-C_i+1,i-1)\)。这样的点的个数是 \(O(n)\) 的。考虑把它们放到二维平面上,贡献相当于就是一个二位偏序,树状数组维护DP即可。复杂度 \(O(n\log n)\)。

T5 Find the LCA

XXI Open Cup.Grand Prix of Tokyo Problem F

题意:给定 \(A_1,\ldots,A_n\),考虑所有 \(n\) 个点组成的有根树,其中第 \(i(2\leq i\leq n)\) 的父亲是 \(p_i(1\leq p_i<i)\),点权为 \(A_i\)。一棵树的分数为顶点 \(LCA(n-1,n)\) 的子树内所有顶点点权的乘积,求所有 \((n-1)!\) 种树的分数和,\(\mod 998244353\)。\(n\leq 2.5\times 10^5,7s\)。

题解:考虑 \(lca(n-1,n)\) 的子树集合为 \(S\) 的方案数。显然,如果 \(lca(n-1,n)=1\),那么 \(S=\{1,2,\ldots,n\}\),方案数是???;如果不是,那么方案数为 \((n-|S|-1)\cdot (\min S+1)\)。现在考虑 \(lca(n-1,n)=1\) 的答案种类,事实上它是所有情况的一半,即 \(\frac{(n-1)!}{2}\)。为什么会这样呢?现在考虑构造双射证明。

构造双射证明说的是,从两个问题集合中构造一组一一映射,如果能构造出来,说明这两个问题是等价的,或者集合大小是相同的。首先考虑从 \(gcd(n-1,n)=x(x\neq 1)\) 映射到 \(gcd(n-1,n)=1\) 的方案:将 \(x\) 的子树中含有 \(n\) 的节点接到 \(p_x\) 上,然后把 \(x\) 和剩下的子树接到 \(1\) 上;然后从 \(gcd(n-1,n)=1\) 映射到 \(gcd(n-1,n)=x(x\neq 1)\):直接将 \(x\) 和它的子树插入 \(n\) 到根的路径上,因为要满足父亲的编号比儿子小,所以插入的位置是唯一的。这样就证明了 \(lca(n-1,n)=1\) 的树一共有 \(\frac{(n-1)!}{2}\) 种。

然后对于 \(lca(n-1,n)\neq 1\) 的情况,大概要求一个这样的式子:

\[\sum_{S\subset\{2,3,\ldots,n\},|S|=k}\min (S)\cdot \prod_{i\in S} (1+A_i) \]

普通的分治FFT说的是,考虑一些多项式的乘积,把它从中间分开,分别计算出左边右边的答案,然后FFT乘起来,复杂度是 \(O(n\log^2 n)\)。这个式子的分治不太一样,大概说的是有很多多项式的乘积求和。这样也可以分治,画一个图可以发现,对于 \([l,mid]\) 的需要卷上一个右边的多项式乘积,对于 \([mid+1,r]\) 的直接加到答案里即可。复杂度还是 \(O(n\log^2 n)\)。

T6 Japanese Knowledge

题意:有一个非降正整数序列 \(A_{1\ldots n}\)。对于每个 \(0\leq k\leq n\),求满足以下条件的非降非负整数序列 \(x_{1\ldots n}\) 的数量 \(\mod 998244353\):

  1. \(x_i\leq A_i(1\leq i\leq n)\);
  2. 恰好有 \(k\) 个位置满足 \(x_i=A_i\)。

\(n\leq 2.5\times 10^5,1\leq A_i\leq 10^5,10s\)。

题解:考虑 \(A\) 数组相当于是在平面上给出了一个区域,其中第 \(i\) 个位置的高度是 \(A_i\),现在实际上是求只能在区域内部走,从左下到右上的方案数。

首先考虑如果没有 \(k\) 的限制,那么可以分治 FFT 解决。如果满足 \(k\) 组 \(x_i=A_i\),发现这个问题的答案等价于 \(f(A_{k+1}-1,A_{k+2}-1,\ldots,A_n-1)\)。证明仍然考虑构造双射,从原问题去掉所有 \(x_i=A_i\) 的位置可以映射到新问题,新问题大概是插入到最前面的大于它的位置映射到原问题?然后就可以分治 FFT 并且在过程中统计答案。复杂度 \(O(n\log^2 n)\)。

T7 没讲。

T8 Chess Tournament

XXI Open Cup.Grand Prix of Samara,Problem I

题意:\(n\) 位选手两两进行一次比赛,每轮至多 \(k\) 对(\(2k\) 位选手互不相同)同时比赛,设计一个总轮数最少的方案。\(n\leq 200,1\leq k\leq \frac{n}2\)。

题解:首先考虑 \(k=\frac{n}2\) 的情况:

若 \(n\) 为奇数,第 \(k\) 轮令 \(i+j\equiv k\pmod n\) 的 \(i\) 和 \(j\) 进行比赛,每一轮都有一个人和自己比(轮空)。

若 \(n\) 为偶数,上面那个方案中每一轮剩下的人肯定都不一样,那个人和 \(n\) 比赛。

因为两种情况都达到了下界,所以一定是最优的。

现在考虑 \(k<\frac{n}2\) 的情况,先将上面的方案按照轮和编号从小到大的顺序写下来(\(n\) 为偶数时,先写 \((i,n)\)),注意到每个人在两轮之间的位置至多改变 \(1\),故同一个人不会在连续 \(\frac{n}2-1\) 场比赛中出现两次,所以直接连续 \(k\) 场比赛一轮即可在达到下界的同时满足题目条件。

完结撒花!谢谢朋友们!

标签:log,复杂度,矩阵,times,leq,APIO2021,单调
来源: https://www.cnblogs.com/winterfrost/p/16179380.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有