2021.12.23 模拟赛

半个小时补觉;一个小时写完拍完 T1;三个小时盯着 T2T3 罚坐。

T1 「JOISC 2016 Day 4」最差记者 2

最大化同色对数。

每个 \(A_i\) 可以匹配的是 \(B\) 中的一个前缀,设为 \(1\dots f_i\)

按权值从大到小考虑,\(A_i\)\(B_{1\dots f_i}\) 中找一个同色并且未匹配过的 \(B_j\) 匹配,越靠后越优。如果找不到,意味着 \(A_i\) 需要改变颜色,具体改变成什么颜色取决后面的元素,只需要保证任意时刻 \(A_i\) 能够匹配的 \(B\) 的个数 \(\ge 1\)

那么维护所有未匹配上的 \(A_i\)\(f_i-i\),如果某时刻存在某个 \(f_i-i=0\),意味着 \(A_i\) 匹配的位置确定,并且 \(B_{1\dots f_i}\) 不能够再被后面的 \(A\) 元素匹配。

每次同色匹配对序列 \(\{f_i-i\}\) 造成的影响是区间 \(-1\),用线段树维护,支持查询最小值及其最右位置。

复杂度 \(\mathcal O(n\log n)\)

T2 AGC028D - Chords

计数所有方案的连通块个数,有两种方式:

  • 一种是同时维护所有方案连通块个数的 \(0\) 次和和 \(1\) 次和,问题在于 \(0\) 次和(方案数)并不好计算(我只 yy 出了 \(\mathcal O(n^4)\) 做法,并且难以处理给出的定边)。
  • 另一种方式是有意地重复计算每个方案,在每个连通块处统计一次所在方案。或者理解为计算贡献。

\(1,2n\) 处断开,一个方案的所有连通块,只存在并列或包含的关系。一个连通块的贡献,在连通块点集的编号最小点和编号最大点组成点对 \((l,r)\) 处统计。

\(f(l,r)\) 表示只考虑区间 \([l,r]\) 内所有点,\(l,r\) 连通的方案数。\(l,r\) 连通的限制,用容斥处理,枚举 \(l\) 所在连通块的最大编号,\(f(l,r)\) 可以递归地表示。

那么 \(f(l,r)\) 乘上 \([l,r]\) 以外随意连的方案数,就是包含连通块 \((l,r)\) 的方案数。

复杂度 \(\mathcal O(n^3)\)

将来的自己没看懂的话,想一想方案、连通块、点对之间的映射关系。

T3 ARC101E - Ribbons on Tree

容斥,钦定一个边集不被染色,那么树会分裂成若干小连通块,每个小连通块随意匹配。

每个不被染色的边贡献 \(-1\) 的容斥系数,树形 DP,记 \(f(u,i)\) 表示 \(u\) 子树中,\(u\) 所在连通块大小为 \(i\)\(u\) 所在连通块以外的贡献。

转移就是树上背包的合并,同时考虑一下是否形成新的连通块。

复杂度 \(\mathcal O(n^2)\)


好好反思 T3 为什么没想出来。

posted @ 2021-12-23 17:20  RenaMoe  阅读(59)  评论(0)    收藏  举报