Examples

2023-2-9 #36 漆黑的螽斯唱到鞘翅都磨断

——Licis《蝉鸣死去的夜晚》

上午模拟赛打的好烂阿。。。

T1 long long 直接写了 __builtinclz,T2 插值忘记忽略掉 \(n\) 较小的点值了,T3 两个部分都会但没拼起来。

垫大底😭😭😭。

199 CFgym102222M Acyclic Orientation

色多项式的定义:任选 \(G\) 中一条边 \(e\),则 \(P_G(x)=P_{G-e}(x)-P_{G/e}(x)\),其中 \(G/e\) 表示合并 \(e\) 对应两个结点。

一种较为简便的计算方式:(\(c(G,S)\) 表示 \(G\) 只保留 \(S\) 的连通分量数量)

\[P_G(x)=\sum_{S\subseteq E}(-1)^{|S|}x^{c(G,S)} \]

特殊图的色多项式:

  • 一个单点的色多项式为 \(P_G(x)=x\)
  • 一棵树的色多项式为 \(P_G(x)=x(x-1)^{|V|-1}\)
  • 一张完全图 $K_n $的色多项式为 \(P_G(x)=x^{\underline|V|}\)
  • 一张零图 \(N_n\)(没有边的图)多项式为 \(P_G(x)=x^{|V|}\)
  • 一个环 \(C_n\) 的色多项式为 \(P_G(x)=(x-1)^{|V|}+(-1)^{|V|}(x-1)\)

结论:一张图的 DAG 定向方式数量等于 \((-1)^{|V|}P_G(-1)\),其中 \(P_G(x)\) 为图 \(G\) 的色多项式。

计算完全二分图的色多项式是简单的,无非是枚举左部的颜色数量:

\[P_G(x)=\sum_cx^{\underline c}\begin{Bmatrix}n\\c\end{Bmatrix}(x-c)^m \]

我们只需求出一行的第二类 Stirling 数,直接卷积即可,

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

zxy 说可以 binomial sum,不过俺不会。

200 P8978 「DTOI-4」中位数

非常喜欢的一道题。

起手二分答案,只需考虑 \(0/1\) 的问题。

一些简单的观察:

  • 一次操作一定是变 \(1\),而且要么操作整个序列,要么操作的 \(1\) 数量比 \(0\) 数量恰好多 \(1\)
  • 使用 \(\lceil\log n\rceil\) 次操作可以使所有数变为最大值。
  • 操作的区间要么不交要么包含。

性质 3 事实上可以更强:操作的区间必定呈包含关系。

证明:我们找到最后的两个相邻且不包含的区间 \(S_i,S_{i+1}\),那么之后的区间都有包含关系,那么肯定存在一个区间 \(S_j\) 使得其与 \(S_i\) 无交,且 \(S_{j+1}\) 包含 \(S_i\)

此时可以发现,我们总可以选择 \(S_i,S_j\) 中一个较长的区间扩展来替代另一个,使得保持合法而操作次数不增。

直接列出 dp:\(f_{k,i}\) 表示使用 \(k\) 次操作,左端点 \(i\) 可以操作到的最远右端点,虽然 dp 值不单调,但是我们显然只需关心前缀 max,那么对于一个固定 \(k\) 能得到的区间中只需考虑左右端点递增的情况。

自己很难独立刻画出这里的单调性啊,可能是我太笨蛋了🙃。

我们一层层地 dp,每层从后往前扫描线,单调地枚举合法的右端点 check。对于一个 \(l,r\),我们需要判定是否存在 \(l\leqslant p\leqslant f_p\leqslant r\) 满足 \((f_p-p+1-(s_{f_p}-s_{p-1}))+(s_r-s_{l-1})>0\)

记左边括号内容是对应区间的权值 \(v_p\)。若确定了 \(p\),那么 \(r\) 一定选择相同 \(s\) 中最大的,不妨预处理 \(s_r\geqslant i\) 对应 \(r\) 最大值 \(g_i\),因此枚举右端点可以通过枚举区间替代。

也就是,我们需要求 \(g_{s_{l-1}-v_p+1}\geqslant f_p\)\(g\) 值的最大值。注意到问题中可以得到很多单调性,可以维护一个单调队列状结构:队头到队尾位置从右到左,权值不升。而 \(s_{l-1}\) 相同的 \(l\) 我们也只需保留最靠左的,而 \(g\) 是单调不升的,因此左式不升,pop 掉所有不合法的队首后的队首一定是我们所求。

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

201 P9070 [CTS2023] 琪露诺的符卡交换

谔谔题,感觉只有一步。

需要得到一个这样的构造:将 \(n\) 个人的 \(n\) 张卡看成一个 \(n\times n\) 的方阵,交换所有的 \((i,j),(j,i)\)

也就是矩阵转置,我们只需排列每个人的卡片使得每一列是个排列,事实上这很容易做到。

我们每次构造一个人与卡片的匹配并去除,而根据经典结论:正则二分图一定有完美匹配,因此每次一定能找到一组匹配。

可以每次直接跑二分图匹配,也可以用链接中的构造算法。

202 CFgym104090J Painting

补杭州站的题。

不妨令 \(a\) 停止在射线 \(b\) 上或墙上,则记其为 \(a\) 的父节点,那么形成一棵树的结构。

每次插入一个点时找到其起点的前驱后继 \(u,v\),我们提取出 \(u\rightarrow lca(u,v)\rightarrow v\) 的这样一条路径上的射线,观察可知 \(u\rightarrow lca(u,v),lca(u,v)\rightarrow v\) 分别构成凸包的上下凸壳。

于是在这两条链上二分出交点即可,动态加叶子求 lca 可以用倍增,复杂度 \(O(n\log n)\)


不太记得一个经典模型了:

区间选择模型:给定 \([1,n]\) 上的 \(m\) 个区间,选择区间有代价,数轴上每个点覆盖的次数有上下界,最小/大化代价。

建立 \(n+1\) 个点的链,区间对应 \(l\)\(r+1\) 的边,一个点覆盖次数就是 \(m\) 减流量,上下界费用流即可。

posted @ 2023-02-09 16:45  xiaoziyao  阅读(217)  评论(0)    收藏  举报