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题. 主要套路是把对 ...
随机推荐
- kafka数据一致性(HW只能保证副本之间的数据一致性,并不能保证数据不丢失ack或者不重复。)
数据一致性问题:消费一致性和存储一致性 例如:一个leader 写入 10条数据,2个follower(都在ISR中),F1.F2都有可能被选为Leader,例如选F2 .后面Leader又活了.可能 ...
- [LeetCode题解]92. 反转链表 II | 一次遍历 + 反转
解题思路 将链表分为三部分:[0, m).[m, n].(n, L],其中 L 为链表长度. 第一步:使用虚拟头节点 dummy,用于将 head 也能参与操作: 第二步:找到第 m-1 节点(fir ...
- js,昨天的日期
var mydate = new Date(); var yester = mydate-24*60*60*1000; var yesterday = new Date(); yesterday.se ...
- 如何获取流式应用程序中checkpoint的最新offset
对于流式应用程序,保证应用7*24小时的稳定运行,是非常必要的.因此对于计算引擎,要求必须能够适应与应用程序逻辑本身无关的问题(比如driver应用失败重启.网络问题.服务器问题.JVM崩溃等),具有 ...
- [PHP安全特性学习]strcmp()函数安全漏洞
简介 PHP函数的安全特性-strcmp() 函数 php-strcmp()函数 PHP strcmp() 函数 strcmp() 函数比较两个字符串. 注释:strcmp() 函数是二进制安全的,且 ...
- ServerLess之云函数实践-天气API
关注我的个人博客,发掘更多的内容 ServerLess之云函数实践-天气API 前言 云计算是大势所趋 Serverless 架构即"⽆服务器"架构,它是一种全新的架构方式,是云计 ...
- Hadoop大数据平台搭建之前期配置(2)
环境:CentOS 7.4 (1708 DVD) 工具:VMware.MobaXterm 一. 克隆大数据集群 1. 选中已经进行了基本配置的虚拟机,进行克隆. 2. 此处改为"创建完整克 ...
- kali Linux的 安装详细步骤
一.打开"kali 官方网站,下载kali镜像文件.地址(https://www.kali.org/downloads/) 在Download菜单界面下,有历史版本下载和最新版下载.找到 ...
- 解析MindMapper选项中的鱼骨选项
MindMapper思维导图可以画鱼骨图,而且完成的相当漂亮,我们可以在选项设置中定义鱼骨图图的默认样式.下面本文就分析了MindMapper选项中可以更改哪些鱼骨图设置. 我们首先打开MindMap ...
- MathType总结编辑括号的类型(上)
括号的种类有很多,我们用得也很多,可以说无处不见,不只是在数学物理这些自然科学的公式中来断地出现括号,即使是在人文艺术类的领域也会有括号的出现.下面就和小编一起来看看公式编辑器编辑括号的类型吧! Ma ...