CSP2019题解
CSP2019题解
格雷码
按照生成的规则模拟一下即可。
括号树
看到括号匹配首先想到用栈,然后又在树上就可以想到可追溯化栈。
令\(a_i=1\)表示\(i\)号节点上的括号为(,否则为),
记栈为\(stk\),其中元素个数为\(top\)。
设\(f_i\)表示加上节点\(i\)所对应的括号所增加的贡献,\(g_i\)表示这个点的答案,转移很显然:
\[
\begin{aligned}
\begin{cases}
f_i=0&(a_{fa_i}=1)\\
f_i=f_{fa_i}&(a_{fa_i}=-1)\\
f_i=0&(a_i=-1,top=0)\\
f_i=f_{stk_{top}}+1&(a_i=-1,top>0)\\
g_i=g_{fa_i}&(a_i=1)\\
g_i=g_{fa_i}+f_i&(a_i=-1)
\end{cases}
\end{aligned}
\]
然后就没了。
树上的数
Emiya 家今天的饭
因为主要食材最大值只会有一个,钦定最大值是哪一个,又因为每一种烹饪手法最多选一次,设\(f[i][j][k]\)表示目前在第\(i\)中烹饪手法,现在做了\(j\)道菜,最多的食材用了\(k\)次,转移很显然就不写了,那么最后你把不满足要求的减掉就行了,这样子是\(O(n^3m)\)的。
考虑优化这个状态,设\(f[i][j]\)为目前在第\(i\)中烹饪手法最大值与其他的的差为\(j\)的方案数,和前面一样容斥就优化成了\(O(n^2m)\)的了。
划分
有一个比较显然但是并不会证的结论就是令最后一段的和最小。
记数列前缀和为\(s_i\),
设\(f_i\)表示\([1...i]\)最后一段最小时,最后一段为\([f_i,i]\),那么有转移
\[
f_i=\max j,\{0\leq j\leq i-1,s_j-s_{f_j}\leq s_i-s_j\}
\]
然后因为\(s\)单调,把这个式子化一下就是\(2s_j-s_{f_j}\leq s_i\),注意到一个单调队列优化\(dp\)的形式所以直接用单调队列优化dp即可。
因为要高精度,所以只能用\(f\)数组往前推求答案。
树的重心
注意一棵树的重心肯定是在其根节点所在重链上的,那么你每次断边时找到最深的满足条件的点\(x\),因为如果重心有两个的话肯定是父子关系,所以再判断一下\(fa_x\)是不是满足条件即可,这样子的话复杂度\(O(n^2)\)。
考虑优化这个东西,在重链上构造一个倍增数组跳重链,然后每次像普通倍增一样即可,然后需要换根,复杂度\(O(n\log n)\),细节见代码。
CSP2019题解的更多相关文章
- CSP2019 题解
CSP2019 题解 D1T1 格雷码(code) 题目传送门 https://loj.ac/problem/3208 题解 按照题意模拟就可以了. 对于第 \(i\) 位,如果 \(k \geq 2 ...
- CSP2019 树的重心 题解
本题当然可以通过大力讨论每棵子树的size的大小关系,然后用各种数据结构暴力维护.但是我更倾向于用一种更为性质的做法. 首先讲一下我在考场上想到的做法(没写).就是考虑换根,在换根的过程中计算每一条边 ...
- csp2019 Emiya家今天的饭题解
qwq 由于窝太菜了,实在是不会,所以在题解的帮助下过掉了这道题. 写此博客来整理一下思路 正文 传送 简化一下题意:现在有\(n\)行\(m\)列数,选\(k\)个数的合法方案需满足: 1.一行最多 ...
- CSP2019 树上的数 题解
题面 这是一道典型的部分分启发正解的题. 所以我们先来看两个部分分. Part 1 菊花图 这应该是除了暴力以外最好想的一档部分分了. 如上图(节点上的数字已省略),如果我们依次删去边(2)(1)(3 ...
- CSP2019 Emiya 家今天的饭 题解
这题在考场上只会O(n^3 m),拿了84分.. 先讲84分,考虑容斥,用总方案减去不合法方案,也就是枚举每一种食材,求用它做超过\(\lfloor \frac{k}{2} \rfloor\) 道菜的 ...
- 【CSP2019】题解合集
诈个尸 先挖坑 虽然连去都没去但还是想做做 今年貌似比去年还毒瘤啊... yrx.hjw都进了省队线tql orz (myh:没AK真丢脸 Day1T1 格雷码 Day1T2 括号树 Day1T3 树 ...
- 【比赛题解】CSP2019 简要题解
D1T1 code 签到题,大家都会. 可以从高位往低位确定,如果遇到 \(1\),则将排名取反一下. 注意要开 unsigned long long. #include <bits/stdc+ ...
- [题解]CSP2019 Solution - Part B
\(\text{orz}\) 一波现场 \(\text{A}\) 掉 \(\text{D1T3}\) 的神仙 D2T3 centroid Solution 考虑每个点 \(u\) 作为重心的贡献 假设 ...
- [题解]CSP2019 Solution - Part A
至于为什么是 \(\text{Part A}\) 而不是 \(\text{Day 1}\) 那是因为 Day1 T3 还没改 (那这六题的 \(\text{solution}\) 就按难度顺序写吧) ...
随机推荐
- LeetCode 189:旋转数组 Rotate Array
公众号:爱写bug(ID:icodebugs) 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. Given an array, rotate the array to the ...
- thymeleaf入门
controller层添加实体 html <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> ...
- 移动端BUG
1.解决 Android 系统 设置line-height和height相同,文字却偏上显示(pc端和ios都显示ok) 行高设置为 normal 则可以解决. 然后高度通过padding填充 lin ...
- 一小段 Dapper 的简单示例
关于 Dapper 的介绍,请参考:Dapper - 一款轻量级对象关系映射(ORM)组件,DotNet 下 using System; using System.Collections.Generi ...
- 使用IDEA的Git插件上传项目教程
如何使用IDEA的Git插件上传项目 一.在https://www.cnblogs.com/zyx110/p/10799387.html中下载 二.注册码云账号 搜索gitee码云插件并安装
- FocusVisualStyle
<Style x:Key="MyFocusVisual"> <Setter Property="Control.Template"& ...
- 澄清Fundebug录屏技术的几点误会
1. "视频"并非真的视频.也不是通过连续播放大量截图来实现 首先请大家观看这个视频: 视频中,当鼠标点击"场景重现",会立即播放一段"视频" ...
- 用构造函数创建对象时,new的行为
用构造函数创建对象: var obj=new 类型名(属性值,…) new: 4件事: 1. 创建一个空对象 2. 让新的子对象继承构造函数的原型对象设置(自动设置新对象的__proto__属性指向构 ...
- CentOS用yum安装MySQL 8.0 .
先说一句,fuck,搞了一下午. 步骤:一:安装yum源: 1.wget https://dev.mysql.com/get/mysql80-community-release-el6-3.noarc ...
- tornado 文件上传
服务端 def post(self, *args, **kwargs): # content_type # filename # body file_data=self.request.files i ...