摘要:
文章有点长,都是由本人一点一点写出来的,公式加载需要一段时间。 CF149D Coloring Brackets 思路 这是一道很好的区间 DP 题目。 我们可以设 \(f_{l, r, c1, c2}\) 表示在 \([l, r]\) 这一段头端染色 \(c1\),尾部染色 \(c2\) 可以获得 阅读全文
摘要:
文章有点长,都是由本人一点一点写出来的,公式加载需要一段时间。 CF576D Flights for Regular Customers 思路 首先我们可以按边的权值对边从小到大进行排序。 然后,我们可以从前往后枚举每一条边 \(i\),假设边 \(i\) 需要经过至少 \(d_i\) 条边才能经过 阅读全文
摘要:
基环树 定义 在树形结构中添加一条边形成的图。 分类 无向图基环树 内向基环树,每个点的出度为 1。 外向基环树,每个点的入度为 1。 找环: 方法1:无向图基环树找环。 拓扑排序,去掉环以外的点,剩下的就是一个那个环。 方法2:有向图和无向图均适用。 原理:在搜索树中检查一个点 \(x\) 的子节 阅读全文
摘要:
树的直径 树上 2 个点距离最远的点形成的简单路径。 性质: 如果所有边权都为正数,那么所有直径的重点都是一个点,那个点就是树的中心。 树上任意点 \(x\) 距离其最远的点一定是树的直径的端点。 树的直径的端点一定是度数为 1 的点。 SPOJ PT07Z, Longest path in a t 阅读全文
摘要:
定义 圆方树:将无向图转化为树形结构的数据结构,使得树上 2 点路径上的点都是原图的必经点。 圆点:原无向图 \(G\) 中的点,仍然保留在圆方树中,称之为圆点。 方点:将每一个点双连通分量新建一个“方点”。 树边:每一个方点都向对应的点双内的圆点连边。 基本性质: 性质一:圆方树的总点数 = 原图 阅读全文
摘要:
例题: P5903 【模板】树上 k 级祖先 题目描述 思路 长链剖分模板题。 长链剖分: 计算 \(f[i][j]\) 表示 \(i\) 的 \(2^j\) 级祖先; 计算 \(up[i][j]\) 表示 \(i\) 的 \(j\) 级祖先; 计算 \(down[i][j]\) 表示在长链上从 \ 阅读全文
摘要:
左偏树模板题 #include <bits/stdc++.h> using namespace std; const int N = 100010; int v[N], l[N], r[N], dis[N]; bool del[N]; int fa[N]; int find(int x) { if 阅读全文
摘要:
有向图最小路径点覆盖(不可相交) 定义 定义:在一张有向无环图 DAG 中,用最少的不相交的路径覆盖所有的点。 实现方法 将原图中每个点 \(x\) 拆为出点 \(out[x]\) 和入点 \(in[x]\)。 对于原图中一条 \(x >y\) 的有向边,在新图中连接 \(out[x]\) 和 \( 阅读全文
摘要:
来自我的洛谷专栏。 强连通分量 定义 有向图 \(G\) 中任意两个点都可以互相到达就称这个有向图 \(G\) 强连通。 强连通分量就是极大的强连通子图。 Tarjan 算法 思路 Tarjan 算法可以用来求强连通分量,其思想是建立一棵搜索树,维护 \(\text{dfn, low}\),简单来说 阅读全文