2022.1.6~2022.1.8 营业日志
2022.1.6~2022.1.8 营业日志
AGC027D Modulo Matrix
Description
构造 \(n\times n\) 的矩阵,满足:
- 矩阵内的数互不相等。
- 存在正整数 \(m\),使得矩阵中两个相邻的数 \(x,y\),满足 \(\max(x,y)\bmod\min(x,y)=m\)。
Analysis
考虑如果 \(1\times n\) 的矩阵并且保证要整除能怎么做。可以按照类似 dfs 的顺序做到一个 \(d(n)\) 做法。然后就不会了,只能想出这么多东西。
Solution
复读鱼大题解,感觉自己对构造题的思考方式还是缺乏了。
考虑加强限制,设 \(m=1\)。
不妨设矩阵是单调的,即右边大于左边,下面大于上面。那么一个位置需要满足的限制是 \(\text{lcm}(a_{i,j-1},a_{i-1,j})|a_{i,j}-1\),发现只要确定了第一行和第一列,就可以构造出整个矩阵。但是这样值域过大了。
题面中“相邻数”的限制提示我们建立二分图模型,不妨设右部点大于左部点,那么就需要保证 \(\text{lcm}(N(i,j))|a_{i,j}-1\),\(N(i,j)\) 表示和 \((i,j)\) 相邻的所有点。
不妨考虑往左部点中填入质数,这样右部点就是四个质数相乘的级别,质数可能很大。为了减少质数的使用,不妨钦定一个位置是两个质数相乘。这样,我们给每个对角线分配一个质数,左部点的权值为对角线上质数的乘积,这样质数的使用降低到了 \(\mathcal{O}(n)\) 级别。合适地分配质数可以通过本题。
启示:对于条件建立图论模型,矩阵上的二分图模型是常见的。还有就是多钦定一些条件,此题大小关系的情况复杂,难以处理,不妨通过钦定将其转化为简单的情况。
CF708D Incorrect Flow
Analysis
一条边类似绝对值的贡献函数比较难处理,不妨钦定每条边都调整成 \(0\),然后再调大,这个时候贡献就是一个分三段的函数了,具体地:
- \(f\leq c\),连流量和费用为 \((f,-1),(c-f,1),(\inf,2)\) 的三条边。
- \(f>c\),连流量和费用为 \((c,-1),(f-c,0),(\inf,2)\) 的三条边。
容易发现代价是凸的,所以可以直接流。
但是写了一下样例跑出了负环,用这个处理一下就好了。
CF1060F Shrinking Tree
Analysis
https://www.luogu.com.cn/blog/yllcmQAQ/solution-cf1060f
后面两天专门训练一下构造吧学多项式。
P5290 [十二省联考 2019] 春节十二响
Analysis
这个题竟然是我最近能做的最思维的一个题(
发现最大的元素一定会被选,考虑一个贪心:每次从大到小选,如果它可以归到前面的其中一个反链,那么就归进去,否则新建一个反链。但是这里实际上涉及到一个决策,就是归到哪个反链的问题。我没有很好的处理方式。
发现一条祖先链的颜色互不相同,考虑以 dfs 序为阶段做一个 DP。虽然出现了和上面一样的问题,但是至少可以发现一个事实:假设最长链长度为 \(l\),那么只会选 \(l\) 种颜色。证明可以考虑调整,若选择了超过 \(l\) 种颜色,那么至少存在一个点,没有最长链上的点和它在同一条反链。那么可以把它归到其中一条链上面,这样我们就把这条反链的大小减少了 \(1\),并且调整是不劣的。
先考虑链怎么做,发现反链长度最多为 \(2\),直接归并两条链就好了。
考虑以子树为阶段做一个 DP,设 \(f_u\) 为 \(u\) 的最优答案。虽然发现根本不能 DP,但实际上可以维护以 \(u\) 为根的反链的最大值,然后贪心地用链的方法合并。看起来很对,暴力合并是 \(\mathcal{O}(n^2)\) 的,不会证,但是交上去发现有 \(60\) 分,说明确实是对的(
考虑怎么加速合并,常见的树上快速合并的方法都要求以 \(\mathcal{O}(\min(x,y))\) 的复杂度合并两个集合。考虑插入一个集合后对原集合的影响,这步不是很难,用 set 维护就好了。
长链剖分维护,复杂度 \(\mathcal{O}(n\log n)\)。
Solution
启发式合并似乎可以做到相同的复杂度,复杂度不会证明。
启示:上面一步步推导贪心的过程,我都是以 DP 为引入,因为不太会贪心(。实际上贪心和 DP 也有着相似的讨论方法,树上问题同样可以类似 DP 地给贪心划分子树阶段,因为实际上贪心也是需要阶段的。
P4542 [ZJOI2011]营救皮卡丘
Analysis
发现每个人的行走路线合起来构成了一个链覆盖,所以可以先 floyd,求出 \(p(u,v)\) 表示 \(u,v\) 之间经过 \(\max(u,v)\) 之间的点的最短路,然后之间建模跑费用流就好了。用 KM 套 wqs 似乎可以做到 \(\mathcal{O}(n^3\log n)\),但是费用流直接过了,这是怎么一回事呢?
CF266D BerDonalds
求图的半径。
先 floyd 求出最短路,中心在点上很好处理,关键是中心在边上。对于一个点 \(i\),它在边 \((u,v,w)\) 上的最短路表现为函数 \(\min(dis_{i,u}+x,dis_{i,v}+w-x)\),设 \(f(x)\) 表示所有点在 \(x\) 处的最大值,我们的问题是求 \(\min f(x)\)。
建立图形直观:
发现只要求出折线的交点就能求出最小值。考虑折线由哪些点构成,发现它就是按照 \(dis(u,i)\) 从大到小排序之后,\(dis(v,i)\) 的前缀最大值,不难给出证明。
排序之后随便算算就好了。复杂度 \(\mathcal{O}(n^3+n^2\log n)\)。
P5540 [BalkanOI2011] timeismoney | 最小乘积生成树
Strange Problem,貌似适用于所有求 \(\min f(A)g(A)\) 的问题。
这里的 \(f(A)\) 为所有 \(a_e\) 的和,\(g(A)\) 为所有 \(b_e\) 的和。将其看做二维平面上的点 \((f(A),g(A))\),发现所有这些点都在左下凸包上。算法流程大致为:
- 找到凸包上的两个点。
- 找到这两个点的对踵点,将这个点加入答案,并分治两边。
这样可以找到所有凸包上的点。
找到两个点是简单的,只需要求出横坐标最小的点和纵坐标最小的点,这个可以以 \(a_e\) 或者 \(b_e\) 作为边权。
找到对踵点相当于最大化三角形面积,拆个叉积式子发现就是求和形式了。
这样只会执行凸包点数次最小生成树,而值域为 \(V\) 的凸包点数是 \(\mathcal{O}(V^{2/3})\) 级别的,总复杂度 \(\mathcal{O}(m\log m(na)^{2/3})\)。
ABC221H Count Multiset
不知道为什么做了好久!今天已经下班了,明天写。
Analysis
比较搞笑。
考虑写出原问题的一个形式化描述,大概是计数数列 \(x\),满足:
- \(\sum ix_i=n\)。
- \(\sum x_i=t,t\in[1,n]\)。
- \(x_i\leq m\)。
有一个显然的 \(\mathcal{O}(n^2m\ln n)\) 的 DP 做法。尝试多项式、倍增等各类 DP 优化技巧发现都做不得,没有第三个限制还是做不得。
考虑做前缀和,然后问题形式长这样:计数数列 \(y\),满足:
- \(\sum y_i=n\)。
- \(y_i\leq y_{i+1}\)。
- \(y_n=t\)。
感觉还是做不得。大眼观察半个小时之后发现这就是划分数/px。这个转化后的问题可以平方做掉。
考虑套上原问题,对于 \(m\) 的限制加上一个容斥,这样答案是什么划分数卷积的形式,还是不行。
不过此时考虑真正意义上的原问题:计数长度在 \([1,n]\) 数列 \(y\),满足:
- \(\sum y_i=n\)。
- \(y_i\leq y_{i+1}\)。
这个是可以直接做的。关于 \(m\) 的限制,我们只要在做的时候时刻容斥掉前面恰好 \(m+1\) 个 \(1\) 的情况就好了。转移方程式大概是:
直接做就好了。
Solution
看到了两种做法。
第一种是,考虑原问题的另外一种转述,将原问题的形式差分,问题是:计数长度在 \([1,n]\) 的数列 \(x\),满足:
- \(\sum ix_i=n\)。
- \(x_i\leq m\)。
这个可以直接套用暴力 DP,复杂度 \(\mathcal{O}(n^2\ln n)\)。
第二种是 alpha1022 的做法,考虑建立原问题的图形直观,大概是考虑一个格路计数模型,限制是:
- 
从 \(x=0\) 出发最终走到 \(x=k\) 的一个位置。 
- 
每次可以向右或者向下。 
- 
不能连续往右边走 \(m\) 步。 
- 
图形的面积为 \(n\)。 
旋转 \(90\) 度,限制是:
- 从 \(y=0\) 的某处出发,走到 \(y=k\) 的某处。
- 每一步可以往右边或者往上。
- 图形面积为 \(n\)。
- 最多连续向右走 \(m\) 步。
考虑设 \(f(n,h)\) 表示面积为 \(n\),高度为 \(h\) 的方案数。枚举上一列的高度:
启示:不是很困难但是不错的一个计数题,展示了计数问题的多维度。基于分拆数的简单的原问题存在至少四种不同的转述,四种转述各自有各自的做法,最后还通过建立图形直观得到了原问题的自然解释。有时候我们所做的转化可能没有分析题目性质,几乎与原问题等价,但是能明显感受到,转化后的问题变得更加直观,性质变得显然。我尝试对上述的每个模型套用分拆数的做法,但结果是不同的,不少做法都变得抽象而难以思考得到。正因如此,我最喜欢的做法是最后的几何转化,它几乎概括了以上的每个模型,并最终将我们引向正解。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号