『杂题总结』Day11 略解

前言

只闻花香,不谈悲喜。饮茶颂书,不争朝夕。

对 BZ 的题目彻底失望了,开始自己瞎搞了。

1. CF2057E2

标签:\(\textbf{Floyd}\)

首先先考虑朴素做法。考虑每次询问二分答案,边权比 \(\text{mid}\) 小的边当作 \(0\),否则当作 \(1\)。如果 \(a\to b\) 的最短路 \(\le k\),那么就是合法的,否则就是不合法的,然后继续二分即可。

我们发现,只考虑边权为 \(0\) 的边,会形成若干个连通块,每个连通块内部的点可以缩成一个点(因为里面的点两两距离都是 \(0\),所以可以看成同一个点)然后再算距离。进一步的,对于每个连通块内部的边权为 \(0\) 的边,实际上我们只需要保留在原图最小生成树上的边即可。(因为我们只关心连通性)

由于最小生成树上只有 \(n-1\) 条边,也就是说,二分的答案本质上只有 \(\mathcal{O}(n)\) 种,故我们可以考虑在询问之前预处理出在这 \(n\) 种答案下任意两个点的最短路。(可以认为是一个每次使用 \(\mathcal{O}(n^2)\) 时间复杂度插入一条边的 \(\text{Floyd}\) 来实现。)

故总时间复杂度 \(\mathcal{O}(n^3+q\log n)\)

\(\texttt{Code}\)

2. CF2057G

标签:构造。

感觉挺精妙的一个构造,反正我是没有想到的。

首先,如果我们能构造出五种方案,他们的 \(|S|\) 的和为 \(s+p\),那么必然存在一种方案满足 \(|S|\le \frac{s+p}{5}\)

考虑如何去构造这样的五种方案。(说实话,为啥要这么想啊,头一次见这样的技巧。。)

题解告诉我们:

如果能将所有点染上五种颜色,使得任何一个点的邻域和自己恰好为这五种颜色,那么对于每种颜色 \(i\),取 \(S\) 为所有颜色为 \(i\)# 格子,以及不被上述任何一个格子覆盖或相邻的 # 格。后者只会出现在边界上,且边界外对应的格子恰好是颜色 \(i\)

显然,这五种方案的 \(S\) 之和都是 \(s+p\)

可以发现,如果 \(\text{col}_{i,j}\equiv 2\times j+i \pmod 5\)

然后直接构造即可。

\(\texttt{Code}\)

3. CF2048G

标签:组合数学,容斥。

题目中给定的矩阵合法条件,等价于:存在一个 \((i,j)\),满足 \(a_{i,j}\) 是这一列上的最小值,且是这一行的最大值。

然后发现,如果我们去枚举 \((i,j)\)\(a_{i,j}\) 的值暴力计算的话,是会算重的。

简单分析一下,算重的情况是因为存在了多个 \((i,j)\),满足了既是列最小值又是行最大值的条件,所以被计算了多次。并且,这样的方案中,满足条件的点对 \((i,j)\) 必然构成了一个 \(n'\times m'\) 的方格(当然,不一定是连续的),并且所有的满足条件的 \((i,j)\)\(a_{i,j}\) 均相同 。

故我们考虑容斥,即枚举 \(n',m'\),然后再枚举满足条件的 \((i,j)\)\(a_{i,j}\) 的值 \(a\),那么答案就是(下文为了方便就用 \(i,j\) 表示了):

\[\begin{aligned} \sum_{a=1}^v \sum_{i=1}^n (-1)^{i+1}\times C_{n}^i \times \bigg(\sum_{j=1}^m (-1)^{j+1}\times C_{m}^j\times a^{i\times(m-j)}\times (v-a+1)^{(n-i)\times j}\times v^{(n-i)\times (m-j)} \bigg)\\ \end{aligned} \]

我们发现 \(m\) 的值非常大,于是考虑对于括号里面的运算观察是否能快速进行。

\[\begin{aligned} \text{now}&=\sum_{j=1}^m (-1)^{j+1}\times C_{m}^j\times a^{i\times(m-j)}\times (v-a+1)^{(n-i)\times j}\times v^{(n-i)\times (m-j)}\\ &=(-1)\times a^{i\times m} \times \bigg(\sum_{j=1}^m (-1)^j \times C_{m}^j \times \Big(a^{-i}\times (v-a+1)^{n-i}\Big)^j \times \Big(v^{n-i}\Big)^{m-j} \bigg)\\ &=(-1)\times a^{i\times m} \times \Bigg(\bigg(\sum_{j=0}^m C_{m}^j \times \Big((-1)\times a^{-i}\times (v-a+1)^{n-i}\Big)^j \times \Big(v^{n-i}\Big)^{m-j} \bigg)+ \Big(v^{n-i}\Big)^m \Bigg) \end{aligned} \]

然后由二项式定理,我们可以直接省掉对于 \(m\) 的枚举:

\[\text{now}=(-1)\times a^{i\times m} \times \Bigg(\bigg(v^{n-i}-a^{-i}\times (v-a+1)^{n-i} \bigg)^m+ \Big(v^{n-i}\Big)^m \Bigg) \]

然后将 \(\text{now}\) 带回原式,我们就成功通过了。

时间复杂度 \(\mathcal{O}(n\times v\times \log m)\)

\(\texttt{Code}\)

posted @ 2025-01-08 08:32  Saltyfish6  阅读(61)  评论(0)    收藏  举报
Document