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_{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\)的正因数个数。
注意,请你要与出题人心灵相通!
考场上由于与出题人心灵不相通的原因,此题应该会获得玄学分数吧。
NOI Online 题解的更多相关文章
- 【题解】NOI 系列题解总集
每次做一道 NOI 系列的估计都很激动吧,对于我这种萌新来说( P1731 [NOI1999]生日蛋糕 练习剪枝技巧,关于剪枝,欢迎看我的垃圾无意义笔记 这道题是有一定难度的,需要运用各种高科技剪枝( ...
- 【noi openjudge题解】最低通行费
这道题完全没有必要去计算限制时间,把时间当做一个参数来做就行了.知道了这一点之后就可以直接使用DP求解了 #include <algorithm> #include <iostrea ...
- POJ1185 炮兵阵地 —— 状压DP
题目链接:http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions ...
- NOI题库刷题日志 (贪心篇题解)
这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个平面上,如果有两个点( ...
- NOI题库 1768最大子矩阵 题解
NOI题库 1768最大子矩阵 题解 总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大 ...
- 【NOI 2019】同步赛 / 题解 / 感想
非常颓写不动题怎么办…… 写下这篇博客警示自己吧…… 游记 7.16 我并不在广二参加 NOI,而是在距离广二体育馆一公里远的包间打同步赛(其实就是给写不动题找个理由) 上午身体不舒服,鸽了半天才看题 ...
- NOI 2021 部分题目题解
最近几天复盘了一下NOI 2021,愈发发觉自己的愚蠢,可惜D2T3仍是不会,于是只写前面的题解 Day1 T1 可以发现,每次相当于将 \(x\to y\) 染上一种全新颜色,然后一条边是重边当且仅 ...
- [NOI导刊2010提高&洛谷P1774]最接近神的人 题解(树状数组求逆序对)
[NOI导刊2010提高&洛谷P1774]最接近神的人 Description 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某 ...
- 【NOI题解】【bzoj题解】NOI2008 bzoj1063 道路设计
@ACMLCZH学长出的毒瘤题T3.再也不是“善良”的出题人了. 题意:bzoj. 题解: 经典的树形DP题目,屡见不鲜了,然而我还是没有写出来. 这一类的题目有很多,例如这里的C题. 主要套路是把对 ...
随机推荐
- hive简单的项目实战
解压user.zip [root@hadoop1 test]# unzip user.zip -d /test/bigdatacase/dataset Archive: user.zip inflat ...
- IAR设置字体
1.IAR设置字体 第一种方法可以在IDE环境下,选择Tools -> option -> Editor - > Colors and Fonts,然后右边的Editor Font就 ...
- 给PDF文件创建书签,实现快速导航
当文档中的页码比较多的情况下,使用目录进行导航是一个很好用的方法,为文档内容制作目录,方便快速查找目标内容.除了内容的快速导航,书签还能指明不同书签的层级关系,展现文档的结构. 图1:书签的功能 一. ...
- 如何正确地安装MathType 7?
作为一名资深的公式编辑器用户,在新版本MathType 7上线的第一时间,已经去体验了一把.那么要如何正确地安装呢?下面就来详细地介绍下它的安装方法. 步骤一 双击下载好的应用程序,就可以开始安装软件 ...
- 如何用Camtasia将喜欢的视频做出复古的感觉
不知道各位可有看老电影的习惯,我个人觉得一些老电影那种别具一格的画面感是非常吸引人的韵味,尽管其色彩不是很鲜艳,但是这种黑白的感觉,对于现在的我们,往往有着不一样的吸引力.于是,我就尝试着用Camta ...
- 关于Vegas制作黑白负片爆闪效果的教程分享
作为一款视频剪辑软件,Vegas界面简洁,操作难度低,比较容易上手,今天小编就带大家了解Vegas制作超级炫酷的黑白负片爆闪效果的操作过程. 1.导入视频 首先,双击打开视频剪辑软件Vegas Pro ...
- JPA query between的多种方式(mongodb为例)
背景 JPA+MongoDB查询,给定一段时间范围查询分页结果,要求时间范围包含. Page<Log> findByCtimeBetweenOrderByCtime( LocalDateT ...
- 实现 Application_Start 和 Application_End
理解 ASP.NET Core: 实现 Application_Start 和 Application_End 在 ASP.NET 中两个常用的处理节点是 Application_Start() 和 ...
- window consul安装和运行
consul 前言 一.consul是什么? 二.使用步骤 1.安装 2.启动 结束~~ 前言 刚开始接触spring cloud,其中就有用到consul,简单介绍一下以及怎么安装运行起来 提示:以 ...
- C++基础练习1
1 /* 2 //读入一个双精度浮点数,保留12位小数输出这个浮点数. 3 #include<iostream> 4 #include <iomanip> 5 using na ...