杂题20200407

Connecting Cities

给定 \(n\) 个点和一个常数 \(D\) ,第 \(i\) 个点权值为 \(a_i\) ,点 \(i,\ j\) 之间有一条边权为 \(|i-j|\times D+a_i+a_j\) 的边,求这张完全图的 MST 权值

  • \(n\leq2\times10^5\)
  • \(D,\ a_i\in[1,\ 10^9]\)

我会 Boruvka 直接莽, \(O(nlog^2n)\)

考虑分治,假设当前处理到了区间 \([l,\ r]\) ,可以发现 \([l,\ mid]\)\([mid+1,\ r]\) 之间的某些边是不会被用到的,只用建出 区间 \([l,\ mid]\)\(A_{pos}-pos\times D\) 最小的 \(pos\)\([mid+1,\ r]\) 中每一个点的边;区间 \([mid+1,\ r]\)\(A_{pos}+pos\times D\) 最小的 \(pos\)\([l,\ mid]\) 中每一个点的边

一共会建出 \(O(n\log n)\) 条边,暴力求最小生成树,时间复杂度 \(O(n\log ^2n)\)

还有一种线性的神仙做法,鸽了


GCJ 2018 Round 1B Task2 Mysterious Road Signs

给定三个长为 \(n\) 的序列 \(A,\ B,\ D\) ,其中 \(D\) 单调递增

定义一段区间 \([l,\ r]\) 合法,当且仅当 \(\exist\ (M,\ N),\ \forall\ l\leq i\leq r,\ D_i+A_i=M\)\(D_i-B_i=N\) 成立

求出合法区间的最长长度,与最长的合法区间个数

  • \(n\leq10^5\)
  • \(A_i,\ B_i,\ D_i\in[1,\ 10^6]\)

做法一:

分治,对于区间 \([l,\ r]\) ,求出 \(mid,\ mid+1\) 对应的 \(M,\ N\) ,往左 / 往右找到第一个不满足 \(M\) / \(N\) 限制的位置,讨论四种情况即可, \(O(n\log n)\)

做法二:

\(f(i,\ j,\ k)\) 为 以 \(i\) 结尾,限制条件中的 \(M=j,\ N=k\) 时,最长的合法区间长度

有用的状态数显然是线性的

转移可以考虑记一个 \(g1(i,\ j)\) 表示限制条件中的 \(M=j,\ N=-1\) 时,最长的合法区间长度; \(g2(i,\ k)\) 表示限制条件中的 \(M=-1,\ N=k\) 时,最长的合法区间长度

现在 \(f(i,\ j,\ k)\) 就可以从 \(f(g1(i,\ j)-1),\ f(g2(i,\ k)-1)\) 转移,时空复杂度 \(O(n)\)


CF444C DZY Loves Colors

给定一个序列,初始 \(a_i=i\) ,每个位置的权值为 \(0\) ,有 \(q\) 次操作:

  1. 将区间 \([l,\ r]\) 赋值为 \(x\) ,如果第 \(i\) 个位置被赋值为 \(x\) ,第 \(i\) 个位置的权值会增加 \(|a_i-x|\)
  2. 询问区间 \([l,\ r]\) 的权值和

\(n,\ q\leq10^5\)

结论:序列的颜色段数量在 \(q\) 次操作中总共只会有 \(O(n+2q)\)

因此在线段树上,对于区间颜色相同的点直接打 tag,否则暴力递归


CF808G Anthem of Berland

给定两个串 \(s,\ t\)\(s\) 包含小写字母和问号, \(t\) 仅包含小写字母

\(s\) 中的每个问号变成一个小写字母(共 \(26^{cnt}\) 种方案),求出所有方案中, \(t\) 匹配 \(s\) 子串的次数的最大值

\(|s|,\ |t|\leq10^5;\ |s|\cdot|t|\leq10^7\)

做法一:

\(f_{i,\ j}\) 为走到 \(s\) 的第 \(i\) 位,匹配了 \(t\) 的前 \(j\) 个字符,当前答案的最大值

对于 \(s_i=\ ?\) ,暴力枚举 \(26\) 种字符,使用 kmp 转移

做法二:

\(f_i\) 为走到 \(s\) 的第 \(i\) 位,当前答案的最大值

可以枚举是否在 \(i\) 处匹配一个 \(t\) 转移,由于最优解 \(t\) 的所有匹配位置可能有交,因此要枚举 \(t\) 的所有 next,但是这并不能保证 \(s\) 对应位置等于 \(t\) 的某一个前缀,因此需要保证在上一段 \(s\) 的末尾放了一个 \(t\)

因此记 \(g_i\) 为强制在 \(s\) 的第 \(i\) 位匹配一个 \(t\) ,当前答案的最大值,即可转移


CF1327D Infinite Path

给定一个长为 \(n\) 的排列 \(p\) ,和一个颜色序列 \(c_i\)

定义两个排列 \(p,\ q\) 的乘积为 \(\{p_{q_i}\}\)

找到最小的正整数 \(k\) ,令 \(q=p^k\) ,存在 \(i\) 满足 \(c_i=c_{q_i}=c_{q_{q_i}}=\cdots\)

\(\displaystyle\sum n\leq2\times10^5\)

结论1:将 \((i,\ p_i)\) 连边,对于 \(p\) 中的所有环,在新图内从这个环的第 \(i\) 个点向第 \(i+k\) 个点连边,构成了 \(p^k\) 的图

结论2:令 \(p\) 中的某一个环环长为 \(sz\) ,则这个环在 \(p^k\) 中构成的环与 \(p^{\gcd(k,\ sz)}\) 中构成的环元素相同

题目即为找一个 \(k\) 使得 \(p^k\) 存在一个颜色相同的环,由于结论2,对于 \(p\) 中的一个环,枚举 \(sz\) 的所有因数 \(k\) ,考虑这个环在 \(p^k\) 中的构成,判断是否满足条件,时间复杂度 \(O(n\sqrt n)\)

posted @ 2020-04-07 09:38  cnJuanzhang  阅读(124)  评论(0编辑  收藏  举报