NOIP2024集训 Day47 总结

news/2024/10/8 22:07:53

前言

人有两次生命,当他意识到只有一次的时候,第二次生命就开始

最小生成树和二分图匹配专题,感觉总体都比较套路。

但是这些套路为啥感觉见都没见过啊,怪不得做这么慢。

观察到对于最终答案显然都是最小生成树上一条两个端点颜色不同的边。

而这个题并不会改变图的形态,仅仅是改变颜色。

故你考虑维护每一个父亲节点,每一种颜色的儿子都开一个 \(\text{multiset}\)(你可以开一个 \(\text{map}\) 来方便实现这个过程),在维护一个答案的 \(\text{multiset}\),维护的时候注意一下插入和删除的细节即可。

复杂度 \(\mathcal{n\log^2 n}\),但是常数巨大。

\(\text{Code}\)

最小公倍树

一个有趣的事实是,你考虑枚举 \(\text{gcd},1\to r\),然后在枚举它在 \([l,r]\) 之间的整数倍是哪些数,这一部分显然是个调和级数,\(\mathcal{O}(n\ln n)\)

然后你看他们之间怎么连边,假设这些合法的 \(\text{gcd}\) 的整数倍分别是 \(a_1,a_2,...a_m\)

显然,你考虑将 \(j\in[2,m]\) 连一条 \((a_j,a_1,\frac{a_j\times a_i}{\text{gcd}})\) 的边即可。因为你本质上只需要将同一层的 \(\text{gcd}\) 连向最小的一个点即可,毕竟他和其他点连的边权显然是最小的。(这个 \(\text{trick}\) 其实出现在了后面的题目里面,就是本质上你边权相同的点你可以只连一个菊花,而没有必要两两互相建边,是非常重要的。)

另外,如果他不是最大的 \(\text{gcd}\),那么使用它显然不会更优,故这样连边不会出错。

连边之后直接跑 \(\text{Kruskal}\) 即可。

复杂度应该是 \(\mathcal{O}((r-l+1)\times (\ln r) \times (\log (r-l+1)))\)

\(\text{Code}\)

Power Tree

这个题题解区有通过差分而得到的非常巧妙的最小生成树做法,这里讲一下自己输出方案巨恶心的动态规划做法。

定义 \(dp_{i,0}\) 表示将 \(i\) 子树之下的叶子节点全部变为相同所需要的最少代价。

定义 \(dp_{i,1}\) 表示将 \(i\) 子树之下的叶子节点可以变为任意数的最小代价。

显然有转移:

\(dp_{i,0}=\min dp_{j\in son_i,0}+\sum_{k\in son_i,k\not= j} dp_{k,1}\)

\(dp_{i,1}=\min dp_{j\in son_i,0}+\sum_{k\in son_i,k\not= j} dp_{k,1}+w_i\)

然后这个输出方案巨恶心,因为你要把所有可能的都输出。

\(\text{Code}\)

City 城市建设

非常重要且典的题,可是我根本不会,所以像我这种脑子不好使的人赶紧去学 \(\text{LCT}\) 吧。

你考虑对于操作询问进行线段树分治。

我们观察到两个性质。

  • 如果你将修改的边赋为 \(\text{inf}\),跑完最小生成树之后,此时不在树上的边一定不在最终的最小生成树上。
  • 如果你将修改的边赋为 \(-\text{inf}\),跑完最小生成树之后,此时在树上的边一定在最终的最小生成树上。

故你每次递归儿子的时候就只留下有用的边,然后把一定会用上的边先用并查集维护上,这样你每次需要跑的点和边都是这个区间的长度从而达到复杂度平衡。

时间复杂度 \(\mathcal{O}(q\log q \times \alpha(n))\)

\(\text{Code}\)

新年的繁荣

参考一下今天的第二题。

观察到边权并不会很大,你考虑 \(\text{Kruskal}\) 求最大生成树的过程,从大到小枚举边权,然后合并连通块。

首先对于那些点权相同的点你可以相互之间直接合并,这样显然不劣。

然后你发现假设当前边权是 \(x\),你考虑找到所有含有点 \(y,x|y\) 的连通块。

观察到这些连通块显然不超过 \(m\) 个,且每个连通块中必然包含 \(x \lor 2^i\),如果不包含那我显然可以在更高边权的时候将 \(x\lor 2^i\) 合并进这个连通块,显然更优,如果超过了 \(m\) 个显然通过鸽巢原理我仍然可以在更高位的地方合并。

所以你跑一遍类似高维后缀和的操作找到这些连通块然后分别合并即可。

时间复杂度 \(\mathcal{O}(m\times 2^m\times \alpha(2^m))\)

\(\text{Code}\)

免费道路

一道比较智慧的题,但是我居然没有想到,我是废物。

你考虑先求出必须要用的鹅卵石路,即你在跑生成树的时候,先跑水泥路,再跑鹅卵石路就可以得到。

然后你再跑一遍生成树,先把必须要用的鹅卵石的路加上,然后先跑鹅卵石路再跑水泥路,鹅卵石路数量到了 \(k\) 个那就别再往生成树里面加鹅卵石路即可。

显然这样是对的,因为你用了必须用的鹅卵石路之后,不管你鹅卵石路后面怎么取,水泥路都有办法让他变成一颗生成树。

无解显然只有三种情况:

  • 图不连通。
  • 必须用的鹅卵石路 \(>k\)
  • 跑完第二遍生成树之后,你尽可能多的用鹅卵石路仍然没用到 \(k\) 条。

\(\text{Code}\)

Sorting a Grid

一道还不错的建模题,大致是会的。

你先考虑合法的情况下, \(b,c\) 需要满足什么条件。

显然,\(c\) 是必须让每一行的数都包含了这一行最终应有的元素。

故你考虑将 \(x\) 染上 \(\lceil \frac{x}{m}\rceil\) 这种颜色,你发现合法的 \(b,c\) 满足:

  • \(c\) 每行的颜色相同。
  • \(b\) 每列的颜色有 \(n\) 种。

显然,对于 \(b\) 你可以通过求一个二分图完美匹配得到。

观察到每一个 \(b\) 显然都会对应它唯一的 \(c\)

时间复杂度 \(\mathcal{O}(n^2m^2)\)

\(\text{Code}\)

全场唯一板子。你将 \((i+j)\) 为奇数的时候看成左部节点,为偶数的时候看成右部节点,然后跑一个最大独立集即可。

\(\text{Code}\)

后记

撒花~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/69176.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Android开发:日志功能备忘

临时记一下吧,以后就直接复制粘贴这里面的好了。实现一个日志记录程序的运行状态,并且带上时间信息,可以写一个类灵活调用。 MyLog.java package com.example.networkaccessrestrictions;import static android.content.ContentValues.TAG;import android.content.Context; …

学年(2024-2025-3) 学号(20241424)《计算机基础与程序设计》第三周学习总结

学期(2024-2025-3) 学号(20241424) 《计算机基础与程序设计》第三周学习总结 作业信息 |这个作业属于([2024-2025-3-计算机基础与程序设计](https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03)| |-- |-- | |这个作业要求在(2024-2025-3计算机基础与程序设计第三周作…

mysql join语法解析

MySQL 支持以下 JOIN 语法用于 SELECT 语句和多表 DELETE 和 UPDATE 语句中的 table_references 部分: table_references: 查询中涉及的一个或多个表的引用,可以是简单表名或 JOIN 表达式的组合。 escaped_table_reference [, escaped_table_reference] ...escaped_table_ref…

Tableau修改行和列的颜色

1.修改颜色 1.1 在列上右键点击设置格式1.2 修改列和角2.逆时针、由里及外依次设置格式在直条上右键

论文《Learning Properties of Ordered and Disordered Materials from Multi-fidelity Data》中的代码实现

github地址:https://github.com/materialsvirtuallab/megnet/tree/master/multifidelity#issues介绍:当前的存储库利用了由同一作者开发的现有MEGNET软件包,并将MEGNET功能扩展到多保真数据集的建模。该存储库将共享公开发布的多保真带隙数据,并展示了运行多保真数据集的模…

Tableau双轴

1.添加度量到行2.添加分类到列3.拖动度量到左侧利润字段处放开

Tableau文本表、直条、散点图、折线图、

1文本表 两次双击选中两个维度2.直条 两次双击依次分别选中一个度量和维度3.散点图 两次双击选中两个度量4.折线图 两次双击依次分别选中一个日期和一个度量