周做题记录 #1

CF1083C Max Mex

Analysis

考虑怎么做单组,可以直接 O(n2) 做。考虑怎么不平方,发现可以尝试 check 一个 x 是否可行,条件是 0x1 可以被一条链串起来。可以二分,然后选择一种你喜欢的判断方式。

考虑用线段树维护这个东西,[l,r] 区间维护值在 [l,r] 内的数的形态,如果是一条链,那么就维护一下链的两个端点,最后只要判断四个点能不能被串起来,可以选择一种你喜欢的判断方式。

CF1749E Cactus Wall

Analysis

发现因为相邻的不能同时染,所以给棋盘黑白染色之后黑白是独立的,也就是说不存在黑墙和白墙连在一起。所以可以 DP 墙,不过拍一下发现 DP 炸了,需要写个最短路,然后就好了。

Solution

发现这东西实际上要求一个平面图最小割,只不过不能用一般的最小割模型来刻画限制,上面最短路实际上是在对偶图上面跑的,可以这么理解。

P8349 [SDOI/SXOI2022] 整数序列

Analysis

枚举了一堆根号结论……

首先可以想到一个暴力,找到两个元素的位置,把它们归并,然后 O(n) 扫一遍。

然后发现这个东西的复杂度是 O(Sx+Sy) 的,并且有 Sx=n,如果有 O(min(Sx,Sy)) 的查询方法,那么根据 [CmdOI]口头禅 的做法,复杂度是根号的。但是可惜好像并没有这样的做法,因为端点可能在较大的那边,比较难处理。

考虑根号分治,小块和小块之间复杂度不超过根号,大块之间因为数量少总复杂度也不超过根号,唯一的问题是小块和大块之间。考虑大块的话,只有数量上的性质,不好处理。考虑小块,小块的结论是元素数不超过 B,那么根据另外一个著名结论,如果 SxB,那么 Sx2nB,所以可以枚举所有小块区间,大块的话,发现区间数量也是 O(nB) 的,所以可以先枚举长度,对于定长区间统一处理,稍加转化就是矩形修改和矩形求 max 问题了,只会分治做,复杂度好像只能 2log,平衡一下应该是可以做到总复杂度 O(nnlogn) 的,但是不想写。

Solution

其实有一个直觉:对于大块来说,有用的点不会很多。但是我没有尝试证明或者证伪这个结论,觉得一眼假就弃了,其实可以考虑一个证明:考虑只有一个数的情况,有用的只有它前面和后面的元素,两个数的话,那就加上这个数前面和后面各一个没选的数。最后元素总数是 O(B) 的,把这些元素拿出来跑暴力就好了。注意这些元素并不一定是连续的,中间没选的可能会干扰区间中数的数量,不过可以发现不存在跨过这些元素的区间,把两边断开分别跑就好了,复杂度根号里面 log

Conclusion

其实度过了靠套路做题的阶段,题目的难点主要就在于对性质的发掘和对模型的转化了,直觉是其中重要的一环,如果有直觉可以不要着急否定,先尝试严谨证明;多做题积累直觉。

CF671D Roads in Yusland

Analysis

线段树合并板子。

Solution

开始考虑过最小割,但是没想到用线性规划模型刻画,毕竟网络流是线性规划的子集,网络流遇到了一些问题可以考虑线性规划刻画。

假设 wi 表示每条边的选择情况,有:

minwivi,eTiwi1,wi1

假设前面对偶变量是 xe,后面对偶变量是 yi,将其对偶:

maxexeiyi,eTiweyivi

发现 yi 其实没啥用,把它去掉:

ans=exeimax(0,eTixevi)

考虑将 xe0 开始往上调整,发现如果有位置大于 vi 了,那么所有 xe 的系数都会变成非正数,这是不优秀的,所以最优解不会让 xe 的和大于 vi,所以问题变成了最大化 xe 的和,且 xe 和不超过 vi

这个的话,从小到上贪心能选即选即可,用左偏树维护路径。

P8123 [BalticOI 2021 Day1] Inside information

Analysis

终于来补这题了吗。

给树上的每条边赋一个权值 ti 表示加入时间,那么问题相当于:

  • 查询 xy 的有向路径上边权是否递增,且最大权值不超过给定值 ti
  • 查询有多少个点满足如上条件。

对于第一个,由于是路径,点分转化。对于第二个,由于是联通块,点分转化。

所以我们就把询问挂到了根上。写一下合法条件发现就是二维偏序,扫描线做到 O(nlogn),套点分再加一个 log

P5296 [北京省选集训2019]生成树计数

Analysis

肯定是矩阵树,考虑怎么转化为边权乘积。

考虑要维护的东西:ak,bk,把它们合并就是 (a+b)k,拆开就是 ik(ki)aibki,好家伙这不二项卷积吗,写出 bk 的 EGF 形式就是 ikbii!xi,把这些多项式卷起来就好了,复杂度 O(n3k2)

猜测和 e 有关系,实际上这个就是把一条边的权值 exp 之后变成乘法了。

P8352 [SDOI/SXOI2022] 小 N 的独立集

Analysis

考虑普通的最大权独立集怎么求,然后就一脸 DP of DP 的样子。设 fu,i,j 表示 fu,0=i,fu,1=j 的方案数,然后可以发现 ji+k 并且 j<i 的没啥用,所以状态数就 O(n2k) 了,总复杂度应该是 O(n2k3)

UVA1364 Knights of the Round Table

Description

给定一张无向图,找出所有点,满足它至少在一个简单奇环中出现。

Analysis

我直接找生成树然后树上差分过了,怪。

Solution

图上简单环问题考虑点双是不错的选择,因为点双满足一个优秀的性质:对于每两个点 x,y,保证存在两条不相交的从 xy 的路径。那么在这个结构上,可以认为有这样一个性质:若一个点双内存在奇环,那么点双内的所有点都是合法点。证明不难。

P3296 [SDOI2013]刺客信条

Description

给定一棵树和两个 01 序列 a,b,现在你可以翻转 a,b 中的任意位,问最少的翻转次数,使得存在排列 p,满足 api=bi 且若 u,v 间有边,那么 pu,pv 间有边。

Analysis

首先找到一个简单的转述:对于排列 p,它的权值为 ap,b 的不同位数,求权值最小的合法排列。

尝试找到 p1,那么 p1 周围就是若干个子树,现在需要把这些子树和 1 周围的子树匹配,匹配的条件是两棵子树同构,要求权值最小。那么可以搜出匹配方案,然后记忆化一下,状态数不超过 O(n2)。然后发现匹配不需要爆搜,用 KM 跑二分图最小权完美匹配就好了,复杂度不超过 113,而且这个东西显然跑不满,可以通过。

KM 学一遍忘一遍。

P4365 [九省联考 2018] 秘密袭击 coat

现在才来补??

题目让我们求这个式子:

Smaxk(S)

考虑每个 di 的贡献,直接树上背包可以做到 O(n2k2),使用 DFS 序优化背包可以做到 O(n2k)

这个 DP 没有优化的前途了,考虑差分式子,具体地,将 x 拆成 ix1,式子变成:

Simaxk(S)1=iS[imaxk(S)]=iS[cnt(S,i)k]

考虑针对 cnt(S,i) 做一个 DP。枚举 i,然后做背包可以做到和上面一样的复杂度。

考虑优化,先忽略枚举 i 的部分,将 i 塞到状态里面,设 fu,i,j 表示 u 结点子树内有 j 个数满足 dvi 的联通块数,Fi(x) 为它的 GF,有:

Fu,i(x)=x[dui]vFv,i(x)

直接维护多项式太慢了,考虑插值维护点值。那么只需要维护向量 Fu,支持操作:

  • 区间乘法,全局加法。
  • 向量点积。

使用线段树合并可以维护。注意这里的线段树需要处理 x,y 为空节点 / y 两个儿子均为空的情况,而不是传统的递归到 l=r。说白了线段树合并就是特殊处理空节点和叶子,其余暴力。时间复杂度 O(n2logW)

Conclusion

涉及的技巧比较多,包括差分,维护点值等等。

以后每周要 vp 至少一场 + 10 题补题,周六清算,根据实际情况可能有调整,另外最好写一些 start coding 时间,不要在代码上花太久。

P5307 [COCI2018-2019#6] Mobitel

Analysis

定义 fi,j,k 表示走到 (i,j)k=nmul 的方案数,复杂度 O(rsn)

CF1268D Invertation in Tournament

Analysis

首先竞赛图缩点之后是一条链状结构,在链上考虑。手玩一下,发现如果有至少三个强连通分量,那么在中间随便找一个翻转就变成强连通分量了。那么只要考虑两个强连通分量的情况,继续手玩,发现如果其中一个存在长度为 n1 的环那么就比较好做,但是如果没有怎么办呢?

Solution

首先有结论,任意 n>3 的强连通竞赛图存在长度为 [3,n] 的所有环,证明可以考虑归纳。所以只要考虑两个都 n3 的情况,暴力即可。

现在只需要考虑怎么快速判断翻转之后是否为强联通竞赛图即可。使用兰道定理,内容如下:

  • 一个有向图为竞赛图,当且仅当它的出度序列 si 排序后满足 jisj(i2)
  • 一个竞赛图为强连通竞赛图,当且仅当其出度序列排序后满足 jisj>(i2)

Conclusion

我的思考卡在了猜想到如果有长度为 n1 的环即问题解决这一步,当初我猜到了结论,但是我认为其结论成立则最优解不会超过 1,而样例 2 与之矛盾,但实际上最终的结论是一个较弱的结论:加上了 n>3 这一个前提,实际上如果考虑证明这个结论的话,即使不能证明原结论,也可以在证明过程中得到一定启发。

P7126 [Ynoi2008] rdCcot

Solution

如果直接考虑联通块的话,模型的结构过于复杂,难以解决,考虑转化视角,考虑每个等价类内的一个“代表元”。在本题中,我们可以考虑联通块中 bfs 序最小的点,有结论:

  • 一个点 x 为联通块中 bfs 序最小的点,当且仅当不存在 bfs 序更小的点 y,使得 x 能直接到 y

充分性显然,考虑必要性。先证明一个引理:若存在链 xyz,满足 dy<dx<dz,则 xz。证明显然。根据此引理,归纳调整即可证明原结论。

所以考虑 x 作为 bfs 序最小点时区间需要满足什么条件,可以发现它只会被左侧最大的 bfs 比它小的点和右侧最小 bfs 序比它小的点替代。使用点分治+平衡树可以解决问题,复杂度 O(nlog2n)

vector 存图 TLE 换成链式前向星过了,离谱。

Conclusion

计数等价类数量,钦定代表元的思路,以及 BFS 序的性质。

有些时候原问题会较为复杂,但是转化视角和模型之后,问题便变得简单。WC2022 T1 也是一个例子,将视角由阶梯方格转到轮廓线之后,“边缘格子”就得到了更好的刻画。

posted @   yllcm  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示