NOI Online 题解

T1

\(t_i = 1\)的边,将\(u_i, v_i\)连一条边权为\(1\)的边。否则连一条边权为\(0\)的边。

对于每一个连通块,若图中不存在一条边权之和为奇数的圈,则可以将这个连通块二染色,使得每条\(1\)边对应的两个端点不同色,每条\(0\)边对应的两个端点同色。我们判断第一种颜色的值之和的增加量与第二种颜色的值之和的增加量是否相等。

若图中存在一条边权之和为奇数的圈,那么我们只需判断每个点对应的值之和$ \mod 2$ 是否同余。

我们接下来来证明这一事实。不妨设我们构造的图\(G\)连通。必要性显然,只需证明充分性即可。

引理一:对任意一个顶点\(u\),我们可以做到将除了\(u\)之外的点\(v\)上的数从\(a_v\)变为\(b_v\)

证明:选一棵以\(u\)为根的有根树,我们对一个非根顶点\(v\),假设\(v\)子树内的点都已经变化完毕,那么我们可以适当的操作\(v\)和它父亲的边,使得\(v\)上的值从\(a_v\)变为\(b_v\)

这样子,若图中不存在一条边权之和为奇数的圈,由于每次第一种颜色的增加量与第二种颜色的增加量相等,所以我们将除了\(u\)之外的点\(v\)\(a_v\)变为\(b_v\)后,容易证明\(u\)上的数\(a_u\)也变为\(b_u\)

否则我们有引理二:

引理二:若存在一个包含\(u\)的简单环,使得其边权之和为奇数,则可以将\(u\)上的值增加或减少\(2\),且其它点上的值不变。

证明:设简单环上的点为\(u_0 = u, u_1, .., u_{l - 1}\)\(u_iu_{i + 1}\)上的权值为\(w_i\)

则若\(\sum_{i = 0}^{j - 1} w_j \equiv 0 (\mod 2)\),我们操作\(u_ju_{j + 1}\)\(u_j\)增加\(1\),否则让\(u_j\)减少\(1\)。(当\(j = 0\)时,我们是让\(u_0\)增加\(1\)的)。

这样容易验证\(u_0\)上的值增加了\(2\),其它点上的值不变。

同理可以将\(u\)上的值减少\(2\).

结合引理\(1,2\),可以得到如果该图\(G\)不能按上述条件二染色,那么只要保持每个点上的数的和的奇偶性不变,我们找一个边权和为奇的圈上的一个点\(u\),用引理一把除\(u\)之外的点\(v\)的数从\(a_v\)变为\(b_v\),这样不改变\(u\)上的数的奇偶性。我们再用引理二把\(u\)上的数变为\(b_u\)即可!

时间复杂度\(O(n + m)\)

T2

首先,我们容易注意到每次冒泡排序的时候,排在每个数左边且比它大的个数如果还有,那么恰好减少了\(1\)

这样,设排在数字\(i\)前面且比\(i\)大的数有\(a_i\)个,那么经过\(k\)轮冒泡排序后,答案为\(\sum_{i = 1}^{n} {\max(a_i - k, 0)}\)

我们先对初始的排列中求出\(a_i\)的值,注意到每次相邻交换操作,只有最多两个\(a_i\)的值发生改变。设\(c_i\)表示\(i\)\(a_1, ..., a_n\)中出现的次数。我们用两个树状数组维护\(c_1, ..., c_n\)的部分和,以及\(c_1, 2c_2, ..., nc_n\)的部分和。这样子即可在\(O(\log n)\)的时间内计算出经过\(k\)轮冒泡排序后的答案。

时间复杂度\(O((n + m) \log n)\)

T3

首先,我们容易发现对一次询问\(k\),问题等价于将\(n\)划分成\((n, k)\)个圈,最大化圈上相邻元素的乘积和。

(为了之后讨论方便,我们暂且与出题人心灵相通一下,把一个长度为\(2\)的圈理解成相邻元素乘积算两次。但是本人并没有看到网站所发的公告,也没有和出题人心灵相通。)

我们称\(b_1 \leq b_2 \leq ... \leq b_m\)在圈上的排列方式是好的,当且仅当它按如下方式排列:

\(b_1\)\(b_2\)相邻,\(b_m\)\(b_{m - 1}\)相邻,且\(b_i\)\(b_{i + 2}\)相邻(\(1 \leq i \leq m - 2\))。

不妨设\(a_1 \leq a_2 \leq ... \leq a_n\),我们证明如下命题:

将这\(n\)个数划分成长度为\(\frac{n}{k}\)\(k\)个圈,使得圈上相邻两个元素乘积之和最大,则取到最大值的解中存在一种满足:

性质1: 每个圈所拥有的元素在下标上是连续的一段。

性质2: 每个圈上的数的排列方式是好的。

(\(k | n,k < n\))

证明:我们另取一个数列\(c\)满足\(c_1 < c_2 < ... < c_n\)。我们在最优解中再取在圈上相邻两个下标\(c\)值乘积之和最大者。如果两个解中虽然相邻下标的\(a\)值乘积相等,但\(c\)值乘积第一个解比第二个解严格大,那么我们也认为第一个解比第二个解优。之后两个解的比较都是先比\(a\)值乘积之和,再比\(c\)值乘积之和。我们证明我们取的这个最优解必定满足了上述条件。

容易知道只需考虑\(k \leq 2\)的情况即可。这样若\(k \ge 3\),把任意两个圈的元素提取成一个子序列,均满足性质1,2,那么整个最优解也满足性质(1)(2)了。

\(k = 1\)证明:对\(n\)归纳。当\(n = 2\)时,显然成立。

假设结论对\(n - 1\)成立,我们设与\(a_n\)相邻的两个数为\(a_i, a_j\),将\(a_n\)从圈中删去,连接\(a_i, a_j\),则由归纳假设,剩下的圈中相邻元素乘积之和最大值当且仅当在圈上的数排列方式为“好的”时取到。将\(a_n\)重新加入圈中,那么我们得到的和的增量为:

\[a_na_i + a_na_j - a_ia_j = a_n^2 - (a_n - a_i)(a_n - a_j) \leq a_n^2 - (a_n - a_{n - 1})(a_n - a_{n - 2}) = a_na_{n - 1} + a_na_{n - 2} - a_{n - 1}a_{n - 2} \tag 2\]

而当圈上所排列的数是好的的时候,\(a_{n - 1}\)\(a_{n - 2}\)也是相邻的。且把\(a_i\)换成\(c_i\)后,\((2)\)等号当且仅当${i, j } = {n - 1, n - 2 } \(时取得。因此\)n$个数在圈上的一个好的排列,构成唯一的最优解。

\(k = 2\)证明:

如果这个解的大小不比\(k = 1\)时好,那么当\(k = 2\)的解满足性质(1)(2)时,容易验证它比\(k = 1\)时的解要更优。(通过一定的计算可以知道\(a\)的乘积之和多了\((a_{k + 1} - a_k) (a_{k + 2} - a_{k - 1})\)

如果\(1 \leq i, j, k, l \leq n\)满足下标\(i,k\)在第一个圈相邻,\(j, l\)在第二个圈相邻,且\(i < k, j < l\),那么我们讨论三种位置关系:

(本来是\(6\)种,但是由两个圈的对称性,只需考虑\(3\)种)

情形一:\(i < j < k < l\),这个时候改为\(i\)\(j\)相邻,\(k\)\(l\)相邻,形成的一个圈的解比原解还要优,矛盾!

情形二:\(i < j < l < k\),这个时候改为\(i\)\(j\)相邻,\(l\)\(k\)相邻,形成的一个圈的解比原解还要优,矛盾!

情形三:\(i < k < j < l\)。这是我们想要的情况。由于排除了情形一、二,我们可以得到\(j\)小于与\(k\)相邻的所有的下标。依次可以推出\(j\)小于圈上所有的下标。

因此最优解只能是一个圈占据\(1, 2, ..., k\),\(k + 1, ..., 2k\),再用\(k = 1\)的结论即得证!

有了这一结论,只需枚举\(n\)的因数\(k\),贪心求解即可。

复杂度为\(O(n \log n + n d(n))\),其中\(d(n)\)\(n\)的正因数个数。

注意,请你要与出题人心灵相通!

考场上由于与出题人心灵不相通的原因,此题应该会获得玄学分数吧。

猜你喜欢

转载自www.cnblogs.com/mathematician/p/12515217.html