当前位置: 首页 > news >正文

NOIP0805模拟赛题解

T1.旅行

大致题意:有一个图,第 \(i\) 次,删除第 \(i\) 个点,或者删除第 \(i\) 个点,并将他的所有邻居连起来。

每次询问可以通过一组路径相互到达的结点对数。

对于询问的内容,由于是无向图,只有在同一个连通块中的节点才能互相到达。

假设有 \(t\) 个连通块,设第 \(i\) 个连通块的大小为 \(sz_i\) ,于是一个连通块中满足要求的点对数量有 \(\frac{(sz_i-1)sz_i}{2}\)

于是问题转化成 \(\sum{\frac{(sz_i-1)sz_i}{2}}\)

对于本题的操作,我们应该可以联想到一个经典的问题。

如果将第二种操作去掉,我们只需要将整个过程倒过来,把删点变成加点,用并查集维护即可。

那么我们是否可以用类似的方法处理?

考虑第二个操作,容易发现,这个操作不会影响其所在连通块的连通性,只会使连通块大小 \(-1\)

于是,我们可以认为第二个操作就是将该点所在连通块大小 \(-1\) ,倒过来也就是 \(+1\)

由此,我们可以倒序处理,一开始,只存在要进行操作二的点,他们的连通块大小为0。

倒叙操作时,对于操作一,我们将那个点加入,将连通块大小设置为1,然后加边。

对于操作二,我们将那个点所在的连通块大小加一。

每次连通块大小改变时,减去原来连通块的大小的贡献,加上新的连通块大小的贡献。

T2.造山

大致题意:对于一个序列,对于每个元素每次操作可以 \(+1\)\(-1\) ,求最少多少次操作可以使得原序列严格上升。

首先,有一个很常见的trick,那就是对于严格上升序列,或者类似的各种严格的大于或者等于这些东西。

我们可以令 \(a_i-=i\) 。这样就将严格的,转换成不严格上升序列。

我们可以观察得出一个结论,修改后的数组的数集,应该是原数组的数集的子集,这个可以用调整法证明。

然后我们对数组离散化,就可以进行dp。

\(f[i][j]\) 表示前 \(i\) 个数,将第 \(i\) 个数修改为 \(j\) 并且满足不严格上升最小需要几次修改。

\(f[i][j] = \min(f[i][j],f[i-1][1\dots j])\)

这是一个 \(O(n^3)\) 的东西。

但发现,只需要对其进行一个前缀min的优化即可到 \(O(n^2)\)

(这题有\(O(n\log n)\)的做法,需要slope trick,可以自行学习)

http://www.sczhlp.com/news/4703/

相关文章:

  • Weblogic-CVE-2018-2894
  • plink软件 二分类 logistic GWAS分析中 P值为NA
  • 深度解析Manus:从多智能体架构到通用AI Agent的技术革命 - 实践
  • 基于 PyTorch 动手实现 LLM
  • vanna chat2db db-gpt
  • Docker安装Nacos
  • C++14新特性个人总结
  • CF1709E 题解
  • Spring Data Neo4j 学习
  • 单链表的定义与基本操作
  • 2025年08月随便做做
  • select与epoll实现差异的理解
  • neo4j 安装
  • 2025.8.3.模拟赛题目及代码记录
  • neo4j 介绍
  • J1939传输协议功能
  • P11620 [Ynoi Easy Round 2025] TEST_34 线性基 随机 线段树
  • [题解]P1516 青蛙的约会
  • python模块之pandas
  • Flora:实现任意长度与规模上下文构建的创新方法
  • Multisim14安装教程超详细保姆级包含下载、安装、汉化、激活
  • 补题祭
  • 函数进阶与按键
  • python对获取网页内容方法
  • Day7 列表类型内置方法 元组类型内置方法 字典类型内置方法 集合类型内置方法 数据类型总结+深浅拷贝
  • instanceof,抽象类和接口
  • LazyVim键位笔记(按使用场景分类)
  • GPIO读取函数
  • 数据结构1——线性表
  • 8.3