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}\) 就按难度顺序写吧) ...
随机推荐
- 【题解】Ples [COCI2011]
[题解]Ples [COCI2011] 依旧是没有传送门,只有提供了数据的官网. [题目描述] \(N\) 个汉子和 \(N\) 个妹纸一起参加舞会,跳舞时只能是一个汉子一个妹纸配对,现在给出每个人的 ...
- Docker入门学习及其安装
1.Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源.Docker可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的Linux机器 ...
- Kafka学习笔记之Kafka Consumer设计解析
0x00 摘要 本文主要介绍了Kafka High Level Consumer,Consumer Group,Consumer Rebalance,Low Level Consumer实现的语义,以 ...
- SAP PI开发手册-ERP发布服务供外围系统调用(RFC类型)
1转自:https://www.cnblogs.com/fanjb/p/10677018.html 8年进入国网项目后陆陆续续做了一些接口,按实现方法去分有RFC和代理类sproxy类型,按服务提供方 ...
- Vue.js项目实战-多语种网站(租车)
首先来看一下网站效果,想写这个项目的读者可以自行下载哦,地址:https://github.com/Stray-Kite/Car: 在这个项目中,我们主要是为了学习语种切换,也就是右上角的 中文/En ...
- JavaScript 数据类型转换表
下表显示了将不同的JavaScript值转换为Number,String和Boolean的结果: 原始值 转换为Number 转换为String 转换为Boolean false 0 "fa ...
- mpvue小程序开发之 实现一个弹幕评论
先上图 就是一个简单的弹幕发送功能 弹幕区的页面: <div class="content" v-show="doommData.length"> ...
- vue.js 父组件主动获取子组件的数据和方法、子组件主动获取父组件的数据和方法
父组件主动获取子组件的数据和方法 1.调用子组件的时候 定义一个ref <headerchild ref="headerChild"></headerchild& ...
- Hive的数据倾斜
目录 什么是数据倾斜 Hadoop框架的特性 主要表现 容易数据倾斜的情况 产生数据清洗的原因 业务场景 空值产生的数据倾斜 不同数据类型关联产生数据倾斜 大小表关联查询产生数据倾斜 一.什么是数据倾 ...
- java多线程执行时主线程的等待
1.通过thread.join()方式,注意:如果有多个子线程,需要将全部的线程先start,然后再join.代码示例如下: public class Main { public static ...