摘要:
T1 一个比较奇怪的树形 DP。 首先看到 \(n \le 3000\) 复杂度就很显然应该是 \(n^2\) 的。 然后考虑设计 DP 状态,令 \(f_{u,v}\) 表示 \(u\) 最近中转点为 \(v\) 时 \(u\) 子树内的最小代价。 最后取 \(\min_{i = 1}^{n} f 阅读全文
摘要:
没睡好,晕…… 不是第一次模拟前一晚没睡好了,我可能是缺心眼 T1 一个送分的构造,但凡再多想一点就随便切了…… 长度为 \(3\) 的链没啥性质,但是沿着特殊的树比如二叉树就能想到毛毛虫那样的结构,然后发现树高太高没用,应该树高不超 \(4\),就直接根上挂几个长分别是 \(1,2,3\) 的链就 阅读全文
摘要:
前言 不会线性代数。 线性方程组 一个线性方程组通常是如下的形式: $$\large \left{\begin{matrix} a_{11}x_1 + a_{12}x_2 + \cdots + a_{1n}x_n = b_1\ a_{21}x_1 + a_{22}x_2 + \cdots + a_{ 阅读全文
摘要:
前言 有些题跑得飞快,就比较离谱。 实现 std::vector 的 insert 和 erase 常数非常玄学,复杂度是 \(\mathcal{O}(n)\) 的但是跑得飞快,利用这个性质我们维护一个有序的数组,然后其他操作都可以靠二分解决。 插入 : std::lower_bound 找到插入位 阅读全文
摘要:
前言 不会 AC 自动机然而会 SAM 是正常的吗? 动态 DP 动态 DP 用于在原本 DP 状态较容易转移情况下,维护动态修改权值。 带修最大子段和 首先是最大子段和问题,从一个序列中取出任意长度的连续子段,最大化字段和。 令 \(f_i\) 表示以 \(i\) 结尾的最大子段和,那么有 : $ 阅读全文
摘要:
前言 今天用了一下 Sublime Text 发现很有意思,赛时使用应该效果不错。 本文用途 NOI 系列赛事现在使用 NOI Linux 2.0 作为比赛是选手使用的系统,其中自带的编辑器/IDE包括 Emacs,Vim,VS Code,Geany,gedit,Lazarus,Joe's own 阅读全文
摘要:
前言 之前见到的一道题,现在有了更优秀的解法。 题意 有一个 \(n\) 个点的无向图,初始没有边,每次加入一条带权边后询问最小生成树权值,无生成树输出 0,加边共计 \(m\) 次。 \(n \le 500,m \le 2000\)。 解法 如果对于每次询问都直接做 Prim 最小生成树是可以通过 阅读全文
摘要:
前言 研究一下堆。 什么是堆 堆是一种点带权的树,每个节点的权都小于/大于其父亲节点的权。 以下为了方便就只说小根堆了。 堆通常需要支持以下几种功能 : 插入(insert) 查询最小值(min) 删除最小值 (extracy min) 合并(merge) 减小一个元素的值(decrease key 阅读全文
摘要:
前言 闲大发了属于是。 不过过年就是要整点让人开心的(?) 归并排序 归并排序以分治的思维处理一个无序的序列。 将序列均分为两份,若不能再分则直接进入步骤 3 分别排序均分后的两序列 现在得到的两个序列都是有序的,每次取出两个序列中较大/较小的那个放在新有序序列最前的位置即可合并两个序列 通过主定理 阅读全文
摘要:
前言 我不会卡常。 我也不会底层优化,这个博客就当个乐子吧。 GCC官方文档 内建函数 编译器 内置的函数,使用会导致减少兼容性和可移植性,于是不适合程序开发,但是 Linux 内核用到了内建函数。 不过 NOI 系列赛事用的编译器都一样,就可以放心用了。 内建函数功能很多,包括访问一些底层信息,这 阅读全文