#### Problem
- [BZOJ4971:\[Lydsy1708 月赛\]记忆中的背包](https://www.lydsy.com/JudgeOnline/problem.php?id=4971)
+ [「Lydsy1708 月赛」记忆中的背包](https://www.lydsy.com/JudgeOnline/problem.php?id=4971)
#### Solution
用排序法常见的情况是输入一个包含几个(一般一到两个)权值的数组,通过排序然后遍历模拟计算的方法求出最优值。
-有些题的排序方法非常显然,如 [Luogu P1209\[USACO1.3\]修理牛棚 Barn Repair](https://www.luogu.org/problemnew/show/P1209) 就是将输入数组差分后排序模拟求值。
+有些题的排序方法非常显然,如 [「USACO1.3」修理牛棚 Barn Repair](https://www.luogu.org/problemnew/show/P1209) 就是将输入数组差分后排序模拟求值。
然而有些时候很难直接一下子看出排序方法,比如 [NOIP 2012 国王游戏](https://vijos.org/p/1779) 就很容易凭直觉而错误地以 $a$ 或 $b$ 为关键字排序,过样例之后提交就发现 WA 了 QAQ。一个常见办法就是尝试交换数组相邻的两个元素来 **推导** 出正确的排序方法。我们假设这题输入的俩个数用一个结构体来保存
## 后悔法
-??? note " 例题[Luogu P2949\[USACO09OPEN\]工作调度 Work Scheduling](https://www.luogu.org/problemnew/show/P2949)"
+??? note " 例题[「USACO09OPEN」工作调度 Work Scheduling](https://www.luogu.org/problemnew/show/P2949)"
贪心思想:
- [洛谷 U53525 前缀和(例题)](https://www.luogu.org/problemnew/show/U53525)
- [洛谷 U69096 前缀和的逆](https://www.luogu.org/problemnew/show/U69096)
- [AT2412 最大の和](https://www.luogu.org/problemnew/show/AT2412)
-- [洛谷 P3131\[USACO16JAN\]子共七 Subsequences Summing to Sevens](https://www.luogu.org/problemnew/show/P3131)
+- [「USACO16JAN」子共七 Subsequences Summing to Sevens](https://www.luogu.org/problemnew/show/P3131)
### 参考
-模拟。顾名思义,就是用计算机来模拟题目中要求的操作,比如 NOIP 2014 的 [生活大爆炸版石头剪刀布](https://loj.ac/problem/2498) ,只需要按照题面的意思来写就可以了。
+模拟。顾名思义,就是用计算机来模拟题目中要求的操作,比如 NOIP 2014 的 [生活大爆炸版石头剪刀布](http://uoj.ac/problem/15) ,只需要按照题面的意思来写就可以了。
-当然,模拟并不总是很好写,参见经典题目 [魔兽世界](http://bailian.openjudge.cn/practice/3750/) 和 [猪国杀](https://www.lydsy.com/JudgeOnline/problem.php?id=1972) 。
+当然,模拟并不总是很好写,参见经典题目 [魔兽世界](http://bailian.openjudge.cn/practice/3750/) 和 [猪国杀](https://loj.ac/problem/2885) 。
模拟题目通常具有码量大、操作多、思路繁复的特点。并且由于它码量大,会导致很难查错,如果在考试中写错是相当浪费时间的。
**求解** :对整个问题设最优值,枚举合并点,将问题分解为左右两个部分,最后合并两个部分的最优值得到原问题的最优值。
-??? note " 例题[洛谷 P1880\[NOI1995\]石子合并](https://www.luogu.org/problemnew/show/P1880)"
+??? note " 例题[「NOI1995」石子合并](https://www.luogu.org/problemnew/show/P1880)"
题目大意:在一个环上有 $n$ 个数 $a_1,a_2,...,a_n$ ,进行 $n-1$ 次合并操作,每次操作将相邻的两堆合并成一堆,能获得新的一堆中的石子数量的和的得分。你需要最大化你的得分。
考虑不在环上,而在一条链上的情况。
[NOIP 2007 矩阵取数游戏](https://vijos.org/p/1378)
- [洛谷 P4767\[IOI2000\]邮局](https://www.luogu.org/problemnew/show/P4767)
+ [「IOI2000」邮局](https://www.luogu.org/problemnew/show/P4767)
数位 DP 问题往往都是这样的题型,给定一个闭区间 $[l,r]$ ,让你求这个区间中满足 **某种条件** 的数的总数。
-??? note " 例题[SCOI2009 windy 数](https://www.lydsy.com/JudgeOnline/problem.php?id=1026)"
+??? note " 例题[SCOI2009 windy 数](https://loj.ac/problem/10165)"
题目大意:给定一个区间 $[l,r]$ ,求其中满足条件 **不含前导 $0$ 且相邻两个数字相差至少为 $2$ ** 的数字个数。
首先我们将问题转化成更加简单的形式。设 $ans_i$ 表示在区间 $[1,i]$ 中满足条件的数的数量,那么所求的答案就是 $ans_r-ans_{l-1}$ 。
[BZOJ 3679 数字之积](https://www.lydsy.com/JudgeOnline/problem.php?id=3679)
- [ZJOI2010 count 数字计数](https://www.lydsy.com/JudgeOnline/problem.php?id=1833)
+ [ZJOI2010 count 数字计数](https://loj.ac/problem/10169)
- [Ahoi2009 self 同类分布](https://www.lydsy.com/JudgeOnline/problem.php?id=1799)
+ [Ahoi2009 self 同类分布](https://www.luogu.org/problem/P4127)
[洛谷 P3413 SAC#1 - 萌数](https://www.luogu.org/problemnew/show/P3413)
[「Luogu P1886」滑动窗口](https://www.luogu.org/problemnew/show/P1886)
- [「NOI2005」瑰丽华尔兹](https://www.lydsy.com/JudgeOnline/problem.php?id=1499)
+ [「NOI2005」瑰丽华尔兹](https://www.luogu.org/problem/P2254)
- [「SCOI2010」股票交易](https://www.lydsy.com/JudgeOnline/problem.php?id=1855)
+ [「SCOI2010」股票交易](https://loj.ac/problem/10183)
回顾例题 1 中的 $w(l, r) = -a_l - \sqrt{r-l} + a_r$ ,由性质 2 可知 $-a_l+a_r$ 满足四边形不等式,而 $r-l$ 满足四边形恒等式和区间包含单调性。再根据 $-\sqrt{x}$ 的凸性以及性质 4 可知 $-\sqrt{r-l}$ 也满足四边形不等式,最终利用性质 1,即可得出 $w(l, r)$ 满足四边形不等式性质了。
-### 例题 2. [「BZOJ1010」「HNOI2008」玩具装箱 toy](https://www.lydsy.com/JudgeOnline/problem.php?id=1010)
+### 例题 2. [「HNOI2008」玩具装箱 toy](https://loj.ac/problem/10188)
题目大意:有 $n$ 个玩具需要装箱,要求每个箱子中的玩具编号必须是连续的。每个玩具有一个长度 $C_i$ ,如果一个箱子中有多个玩具,那么每两个玩具之间要加入一个单位长度的分隔物。形式化地说,如果将编号在 $[l,r]$ 间的玩具装在一个箱子里,那么这个箱子的长度为 $r-l+\sum_{k=l}^r C_k$ 。现在需要制定一个装箱方案,使得所有容器的长度与 $K$ 差值的平方之和最小。
## 例题选讲
-??? note " 例题[「HNOI2008」玩具装箱 TOY](https://www.lydsy.com/JudgeOnline/problem.php?id=1010)"
+??? note " 例题[「HNOI2008」玩具装箱 TOY](https://loj.ac/problem/10188)"
令 $f_i$ 表示前 $i$ 个物品,随意分组装在任意多个容器里所能得到的最小费用。
写出 **状态转移方程** : $f_i=\min\{f_j+(pre_i-pre_j+i-j-1-L)^2\}$ ,其中 $pre_i$ 表示前 $i$ 个数的前缀和。
## 习题
- [「SDOI2016」征途](https://www.lydsy.com/JudgeOnline/problem.php?id=4518)
+ [「SDOI2016」征途](https://loj.ac/problem/2035)
- [「ZJOI2007」仓库建设](https://www.lydsy.com/JudgeOnline/problem.php?id=1096)
+ [「ZJOI2007」仓库建设](https://loj.ac/problem/10189)
- [「APIO2010」特别行动队](https://www.lydsy.com/JudgeOnline/problem.php?id=1911)
+ [「APIO2010」特别行动队](https://loj.ac/problem/10190)
- [「BZOJ 4709」「JSOI2011」柠檬](https://www.lydsy.com/JudgeOnline/problem.php?id=4709)
+ [「JSOI2011」柠檬](https://www.luogu.org/problem/P5504)
[「Codeforces 311B」Cats Transport](http://codeforces.com/problemset/problem/311/B)
- [「NOI2007」货币兑换](https://www.lydsy.com/JudgeOnline/problem.php?id=1492)
+ [「NOI2007」货币兑换](https://loj.ac/problem/2353)
- [「NOI2019」回家路线](https://www.luogu.org/problemnew/show/P5468)
+ [「NOI2019」回家路线](https://loj.ac/problem/3156)
- [「NOI2016」国王饮水记](https://www.luogu.org/problemnew/show/P1721)
+ [「NOI2016」国王饮水记](http://uoj.ac/problem/223)
- [「NOI2014」购票](https://www.luogu.org/problemnew/show/P2305)
+ [「NOI2014」购票](http://uoj.ac/problem/7)
[NOI2001 炮兵阵地](https://www.luogu.org/problemnew/show/P2704)
- [\[USACO06NOV\]玉米田 Corn Fields](https://www.luogu.org/problemnew/show/P1879)
+ [「USACO06NOV」玉米田 Corn Fields](https://www.luogu.org/problemnew/show/P1879)
- [AHOI2009 中国象棋](https://www.lydsy.com/JudgeOnline/problem.php?id=1801)
+ [AHOI2009 中国象棋](https://www.luogu.org/problem/P2051)
[九省联考 2018 一双木棋](https://www.luogu.org/problemnew/show/P4363)
## 经典例题
- [二逼平衡树](https://www.lydsy.com/JudgeOnline/problem.php?id=3196) 外层线段树,内层平衡树。
+ [二逼平衡树](https://loj.ac/problem/106) 外层线段树,内层平衡树。
## 示例代码
1. [单点修改,区间查询](https://loj.ac/problem/130)
2. [区间修改,区间查询](https://loj.ac/problem/132)
3. [【模板】线段树 2](https://www.luogu.org/problemnew/show/P3373)
-4. [\[Ynoi2019 模拟赛\]Yuno loves sqrt technology III](https://www.luogu.org/problemnew/show/P5048)
-5. [\[Violet\]蒲公英](https://www.luogu.org/problemnew/show/P4168)
+4. [「Ynoi2019 模拟赛」Yuno loves sqrt technology III](https://www.luogu.org/problemnew/show/P5048)
+5. [「Violet」蒲公英](https://www.luogu.org/problemnew/show/P4168)
6. [作诗](https://www.luogu.org/problemnew/show/P4135)
## 经典题目
- [「NOI2015」程序自动分析](https://www.lydsy.com/JudgeOnline/problem.php?id=4195)
+ [「NOI2015」程序自动分析](http://uoj.ac/problem/127)
- [「JSOI2008」星球大战](https://www.lydsy.com/JudgeOnline/problem.php?id=1015)
+ [「JSOI2008」星球大战](https://www.luogu.org/problem/P1197)
- [「NOI2001」食物链](http://poj.org/problem?id=1182)
+ [「NOI2001」食物链](https://www.luogu.org/problem/P2024)
[「NOI2002」银河英雄传说](https://www.luogu.org/problemnew/show/P1196)
## 例题
- [\[JLOI2011\]不重复数字](https://www.lydsy.com/JudgeOnline/problem.php?id=2761)
+ [「JLOI2011」不重复数字](https://www.luogu.org/problem/P4305)
- A:算法竞赛中,数据结构的考察主要分为两类:
- 1. 考察对于特定信息的检索与维护和对特定操作的支持,例如 [「SCOI2010」序列操作](https://www.lydsy.com/JudgeOnline/problem.php?id=1858)
+ 1. 考察对于特定信息的检索与维护和对特定操作的支持,例如 [「SCOI2010」序列操作](https://www.luogu.org/problem/P2572)
- 2. 使用合适数据结构加速信息检索,优化算法复杂度,例如 [「APIO2012」派遣](https://www.lydsy.com/JudgeOnline/problem.php?id=2809)
+ 2. 使用合适数据结构加速信息检索,优化算法复杂度,例如 [「APIO2012」派遣](https://www.luogu.org/problem/P1552)
- Q:有没有一种完美的数据结构可以搞定所有事情啊?
}
```
-???+note " 例题[luogu P4357\[CQOI2016\]K 远点对](https://www.luogu.org/problem/P4357)"
+???+note " 例题[「CQOI2016」K 远点对](https://www.luogu.org/problem/P4357)"
给定平面上的 $n$ 个点 $(x_i,y_i)$ ,求欧几里得距离下的第 $k$ 远无序点对之间的距离。
$n\le 100000 , 1\le k\le 100 , 0\le x_i,y_i<2^{31}$
## 习题
- [luogu P2479\[SDOI2010\]捉迷藏](https://www.luogu.org/problem/P2479)
+ [「SDOI2010」捉迷藏](https://www.luogu.org/problem/P2479)
- [luogu P4169\[Violet\]天使玩偶/SJY 摆棋子](https://www.luogu.org/problem/P4169)
+ [「Violet」天使玩偶/SJY 摆棋子](https://www.luogu.org/problem/P4169)
- [luogu P2093\[国家集训队\]JZPFAR](https://www.luogu.org/problem/P2093)
+ [「国家集训队」JZPFAR](https://www.luogu.org/problem/P2093)
- [luogu P4390\[BOI2007\]Mokia 摩基亚](https://www.luogu.org/problem/P4390)
+ [「BOI2007」Mokia 摩基亚](https://www.luogu.org/problem/P4390)
[luogu P4475 巧克力王国](https://www.luogu.org/problem/P4475)
- [luogu P3769\[CH 弱省胡策 R2\]TATT](https://www.luogu.org/problem/P3769)
+ [「CH 弱省胡策 R2」TATT](https://www.luogu.org/problem/P3769)
## 习题
- [「BZOJ 3282」Tree](https://lydsy.com/JudgeOnline/problem.php?id=3282)
-- [「HNOI2010」Bounce 弹飞绵羊](https://lydsy.com/JudgeOnline/problem.php?id=2002)
+- [「HNOI2010」弹飞绵羊](https://www.luogu.org/problem/P3203)
## 维护树链信息
LCT 通过 `Split(x,y)` 操作,可以将树上从点 $x$ 到点 $y$ 的路径提取到以 $y$ 为根的 Splay 内,树链信息的修改和统计转化为平衡树上的操作,这使得 LCT 在维护树链信息上具有优势。此外,借助 LCT 实现的在树链上二分比树链剖分少一个 $O(\log n)$ 的复杂度。
-???+note " 例题[luogu P1501\[国家集训队\]Tree II](https://www.luogu.org/problemnew/show/P1501)"
+???+note " 例题[「国家集训队」Tree II](https://www.luogu.org/problemnew/show/P1501)"
给出一棵有 $n$ 个结点的树,每个点的初始权值为 $1$ 。 $q$ 次操作,每次操作均为以下四种之一:
1. `- u1 v1 u2 v2` :将树上 $u_1,v_1$ 两点之间的边删除,连接 $u_2,v_2$ 两点,保证操作合法且连边后仍是一棵树。
### 习题
- [luogu P3690【模板】Link Cut Tree(动态树)](https://www.luogu.org/problemnew/show/P3690)
-- [luogu P2486\[SDOI2011\]染色](https://www.luogu.org/problemnew/show/P2486)
-- [luogu P4332\[SHOI2014\]三叉神经树](https://www.luogu.org/problemnew/show/P4332)
+- [「SDOI2011」染色](https://www.luogu.org/problemnew/show/P2486)
+- [「SHOI2014」三叉神经树](https://www.luogu.org/problemnew/show/P4332)
## 维护连通性质
借助 LCT 的 `Find()` 函数,可以判断动态森林上的两点是否连通。如果有 `Find(x)==Find(y)` ,则说明 $x,y$ 两点在一棵树上,相互连通。
-???+note " 例题[luogu P2147\[SDOI2008\]洞穴勘测](https://www.luogu.org/problemnew/show/P2147)"
+???+note " 例题[「SDOI2008」洞穴勘测](https://www.luogu.org/problemnew/show/P2147)"
一开始有 $n$ 个独立的点, $m$ 次操作。每次操作为以下之一:
1. `Connect u v` :在 $u,v$ 两点之间连接一条边。
如果要求将边双连通分量缩成点,每次添加一条边,所连接的树上的两点如果相互连通,那么这条路径上的所有点都会被缩成一个点。
-???+note " 例题[luogu P2542\[AHOI2005\]航线规划](https://www.luogu.org/problemnew/show/P2542)"
+???+note " 例题[「AHOI2005」航线规划](https://www.luogu.org/problemnew/show/P2542)"
给出 $n$ 个点,初始时有 $m$ 条无向边, $q$ 次操作,每次操作为以下之一:
1. `0 u v` :删除 $u,v$ 之间的连边,保证此时存在这样的一条边。
### 习题
-- [luogu P4172\[WC2006\]水管局长](https://www.luogu.org/problem/P4172)
-- [luogu P4180【模板】严格次小生成树\[BJWC2010\]](https://www.luogu.org/problemnew/show/P4180)
-- [luogu P2387\[NOI2014\]魔法森林](https://www.luogu.org/problemnew/show/P2387)
+- [「WC2006」水管局长](https://www.luogu.org/problem/P4172)
+- [「BJWC2010」](https://www.luogu.org/problemnew/show/P4180)
+- [「NOI2014」魔法森林](http://uoj.ac/problem/3)
## 维护子树信息
LCT 不擅长维护子树信息。统计一个结点所有虚子树的信息,就可以求得整棵树的信息。
-???+note " 例题[luogu P4219\[BJOI2014\]大融合](https://www.luogu.org/problem/P4219)"
+???+note " 例题[「BJOI2014」大融合](https://www.luogu.org/problem/P4219)"
给定 $n$ 个结点和 $q$ 次操作,每个操作为如下形式:
1. `A x y` 在结点 $x$ 和 $y$ 之间连接一条边。
## 习题
-- [「SCOI2010」序列操作](https://www.lydsy.com/JudgeOnline/problem.php?id=1858)
-- [「SHOI2015」脑洞治疗仪](https://www.lydsy.com/JudgeOnline/problem.php?id=4592)
+- [「SCOI2010」序列操作](https://www.luogu.org/problem/P2572)
+- [「SHOI2015」脑洞治疗仪](https://www.luogu.org/problem/P4344)
- [「Luogu 2787」理理思维](https://www.luogu.org/problemnew/show/P2787)
- [「Luogu 4979」矿洞:坍塌](https://www.luogu.org/problemnew/show/P4979)
大部分的可持久化 Trie 题中,Trie 都是以 01-Trie 的形式出现的。
-??? note " 例题[最大异或和](https://www.lydsy.com/JudgeOnline/problem.php?id=3261)"
+??? note " 例题[最大异或和](https://www.luogu.org/problem/P4735)"
对一个长度为 $n$ 的数组 $a$ 维护以下操作:
1. 在数组的末尾添加一个数 $x$ ,数组的长度 $n$ 自增 $1$ 。
## 经典例题
- [陌上花开](https://www.lydsy.com/JudgeOnline/problem.php?id=3262) 将第一维排序处理,然后用树套树维护第二维和第三维。
+ [陌上花开](https://www.luogu.org/problem/P3810) 将第一维排序处理,然后用树套树维护第二维和第三维。
## 示例代码
- [【模板】普通平衡树](https://loj.ac/problem/104)
- [【模板】文艺平衡树](https://loj.ac/problem/105)
-- [\[HNOI2002\]营业额统计](https://www.lydsy.com/JudgeOnline/problem.php?id=1588)
-- [\[HNOI2004\]宠物收养所](https://www.lydsy.com/JudgeOnline/problem.php?id=1208)
+- [「HNOI2002」营业额统计](https://loj.ac/problem/10143)
+- [「HNOI2004」宠物收养所](https://loj.ac/problem/10144)
## 练习题
- [luogu P4402\[Cerc2007\]robotic sort 机械排序](https://www.luogu.org/problemnew/show/P4402) / [bzoj 1552(权限题)](https://www.lydsy.com/JudgeOnline/problem.php?id=1552)
+ [「Cerc2007」robotic sort 机械排序](https://www.luogu.org/problemnew/show/P4402)
[二逼平衡树(树套树)](https://loj.ac/problem/106)
[bzoj 2827 千山鸟飞绝](https://www.lydsy.com/JudgeOnline/problem.php?id=2827)
- [bzoj 4923\[Lydsy1706 月赛\]K 小值查询](https://www.lydsy.com/JudgeOnline/problem.php?id=4923)
+ [「Lydsy1706 月赛」K 小值查询](https://www.lydsy.com/JudgeOnline/problem.php?id=4923)
* * *
[文艺平衡树(Splay)](https://loj.ac/problem/105)
- [\[ZJOI2006\]书架](https://www.lydsy.com/JudgeOnline/problem.php?id=1861)
+ [「ZJOI2006」书架](https://www.luogu.org/problem/P2596)
- [\[NOI2005\]维护数列](https://www.lydsy.com/JudgeOnline/problem.php?id=1500)
+ [「NOI2005」维护数列](https://www.luogu.org/problem/P2042)
[CF 702F T-Shirts](http://codeforces.com/problemset/problem/702/F)
顺带提一句,“gty 的妹子树”的树分块做法可以被菊花图卡掉。
-### [BZOJ4763 雪辉](https://www.lydsy.com/JudgeOnline/problem.php?id=4763)
+### [BZOJ4763 雪辉](https://www.luogu.org/problem/P3603)
先进行树分块,然后对每个块的关键点,预处理出它到祖先中每个关键点的路径上颜色的 bitset,以及每个关键点的最近关键点祖先,复杂度是 $O(n\sqrt n+\frac{nc}{32})$ ,其中 $n\sqrt n$ 是暴力从每个关键点向上跳的复杂度, $\frac{nc}{32}$ 是把 $O(n)$ 个 `bitset` 存下来的复杂度。
[UVA11626 Convex Hull](https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=78&page=show_problem&problem=2673)
- [洛谷 P2742\[USACO5.1\]圈奶牛 Fencing the Cows](https://www.luogu.org/problemnew/show/P2742)
+ [「USACO5.1」圈奶牛 Fencing the Cows](https://www.luogu.org/problemnew/show/P2742)
[POJ1873 The Fortified Forest](http://poj.org/problem?id=1873)
[POJ1113 Wall](http://poj.org/problem?id=1113)
- [洛谷 P3829\[SHOI2012\]信用卡凸包](https://www.luogu.org/problemnew/show/P3829)
+ [「SHOI2012」信用卡凸包](https://www.luogu.org/problemnew/show/P3829)
\end{gathered}
$$
- [NOIP2017 提高组 奶酪](https://loj.ac/problem/2317) 就运用了这一知识,可以作为欧氏距离的例题。
+ [NOIP2017 提高组 奶酪](http://uoj.ac/problem/332) 就运用了这一知识,可以作为欧氏距离的例题。
以此类推,我们就得到了 $n$ 维空间中欧氏距离的距离公式:对于 $\vec A(x_{11}, x_{12}, \cdots,x_{1n}) ,~ \vec B(x_{21}, x_{22}, \cdots,x_{2n})$ ,有
[POJ 1279 Art Gallery](http://poj.org/problem?id=1279) 求多边形的核
- [\[CQOI2006\]凸多边形](https://www.lydsy.com/JudgeOnline/problem.php?id=2618)
+ [「CQOI2006」凸多边形](https://www.luogu.org/problem/P4196)
## 练习
- [BZOJ 1337\[最小圆覆盖\]](http://www.lydsy.com/JudgeOnline/problem.php?id=1337) [BZOJ 2732\[HNOI2012 射箭\]](http://www.lydsy.com/JudgeOnline/problem.php?id=2732)
+ [最小圆覆盖](https://www.luogu.org/problem/P1742)
+
+ [「HNOI2012」射箭](https://www.luogu.org/problem/P3222)
## 参考资料
## 例题
-- [LOJ#2317.「NOIP2017」奶酪](https://loj.ac/problem/2317)
+- [「NOIP2017」奶酪](http://uoj.ac/problem/332)
## 参考
## 习题
- [bzoj 1715:\[Usaco2006 Dec\]Wormholes 虫洞](https://www.lydsy.com/JudgeOnline/problem.php?id=1715)
+ [Usaco2006 Dec Wormholes 虫洞](https://loj.ac/problem/10085)
- [bzoj 2330:\[SCOI2011\]糖果](https://www.lydsy.com/JudgeOnline/problem.php?id=2330)
+ [「SCOI2011」糖果](https://loj.ac/problem/2436)
[POJ 1364 King](http://poj.org/problem?id=1364)
在动态点分治的过程中,一个结点在其点分树上的祖先结点的信息中可能会被重复计算,这是我们需要消去重复部分的影响。一般的方法是对于一个连通块用两种方式记录:一个是其到分治中心的距离信息,另一个是其到点分树上分治中心父亲的距离信息。这一部分内容将在例题中得到展现。
-??? note " 例题[luogu P2056\[ZJOI2007\]捉迷藏](https://www.luogu.org/problemnew/show/P2056)"
+??? note " 例题[「ZJOI2007」捉迷藏](https://www.luogu.org/problemnew/show/P2056)"
给定一棵有 $n$ 个结点的树,初始时所有结点都是黑色的。你需要实现以下两种操作:
- [「Luogu 3381」【模板】最小费用最大流](https://www.luogu.org/problemnew/show/P3381)
- [「Luogu 4452」航班安排](https://www.luogu.org/problemnew/show/P4452)
-- [「SDOI 2009」晨跑](https://www.lydsy.com/JudgeOnline/problem.php?id=1877)
-- [「SCOI 2007」修车](https://www.lydsy.com/JudgeOnline/problem.php?id=1070)
-- [「HAOI 2010」订货](https://www.lydsy.com/JudgeOnline/problem.php?id=2424)
-- [「NOI 2012」美食节](https://www.lydsy.com/JudgeOnline/problem.php?id=2879)
+- [「SDOI 2009」晨跑](https://www.luogu.org/problem/P2153)
+- [「SCOI 2007」修车](https://www.luogu.org/problem/P2053)
+- [「HAOI 2010」订货](https://www.luogu.org/problem/P2517)
+- [「NOI 2012」美食节](https://loj.ac/problem/2674)
- [「USACO 4.4」Pollutant Control](https://www.luogu.org/problemnew/show/P1344)
- [「USACO 5.4」Telecowmunication](https://www.luogu.org/problemnew/show/P1345)
- [「Luogu 1361」小 M 的作物](https://www.luogu.org/problemnew/show/P1361)
-- [「SHOI 2007」善意的投票](https://www.lydsy.com/JudgeOnline/problem.php?id=1934)
+- [「SHOI 2007」善意的投票](https://www.luogu.org/problem/P2057)
* * *
+++ /dev/null
-拆点是一种 ** [网络流](../flow.md) ** 建模思想,用来处理 **点权或者点的流量限制** 的问题。这种思路同样可以用于其他的图论算法中(比较经典的有 **分层图** )
-
-## 例题 经典问题 结点有流量限制的最大流
-
-如果把结点转化成边,那么这个问题就可以套板子解决了。
-
-我们考虑把有流量限制的结点转化成这样一种形式:由两个结点 $u,v$ 和一条边 $<u,v>$ 组成的部分。其中,结点 $u$ 承接所有从原图上其他点的出发到原图上该点的边,结点 $v$ 引出所有从原图上该点出发到达原图上其他点的边。边 $<u,v>$ 的流量限制为原图该点的流量限制,再套板子就可以解决本题。这就是拆点的基本思想。
-
-如果原图是这样:
-
-![](./images/node1.png)
-
-拆点之后的图是这个样子:
-
-![](./images/node2.png)
-
-## 例题 [\[JLOI2011\]飞行路线](https://www.lydsy.com/JudgeOnline/problem.php?id=2763)
-
-题目大意:有 $n$ 个结点, $m$ 条边, $k$ 张旅行券,可以使用一张旅行券使得经过该边的边权除以二向下取整,求从结点 $s$ 到 $t$ 的最短路的长度。
-
-当然可以使用 DP 方法解决这道题。我们考虑使用拆点的解法。
-
-将每个结点拆成 $k$ 个点,这样图就可以形象化地看做是 $k$ 层,每层的结点之间连上原来就有的边,边权和原来相等;若图上存在边 $<u,v>$ ,则在当前层的 $u$ 所对应的结点和更高一层的 $v$ 所对应的结点,连接一条边权为原边权除以二向下取整的边。这样可以保证最多只使用 $k$ 次旅行券,因为每次从较低的一层到上面一层,就相当于是使用了一张旅行券。以最底层的 $s$ 所对应的点跑单源最短路即可。
不断向上跳链,当跳到同一条链上时,返回深度较小的结点即为 LCA。
-## 例题: [「ZJOI2008」树的统计](https://www.lydsy.com/JudgeOnline/problem.php?id=1036)
+## 例题: [「ZJOI2008」树的统计](https://loj.ac/problem/10138)
### 题目大意
[「luogu P3379」【模板】最近公共祖先(LCA)](https://www.luogu.org/problemnew/show/P3379) (树剖求 $lca$ 无需数据结构,可以用作练习)
- [「JLOI2014」松鼠的新家](https://www.lydsy.com/JudgeOnline/problem.php?id=3631) (当然也可以用树上差分)
+ [「JLOI2014」松鼠的新家](https://loj.ac/problem/2236) (当然也可以用树上差分)
- [「HAOI2015」树上操作](https://www.lydsy.com/JudgeOnline/problem.php?id=4034)
+ [「HAOI2015」树上操作](https://loj.ac/problem/2125)
[「luogu P3384」【模板】树链剖分](https://www.luogu.org/problemnew/show/P3384)
- [「NOI2015」软件包管理器](https://www.lydsy.com/JudgeOnline/problem.php?id=4196)
+ [「NOI2015」软件包管理器](http://uoj.ac/problem/128)
- [「SDOI2011」染色](https://www.lydsy.com/JudgeOnline/problem.php?id=2243)
+ [「SDOI2011」染色](https://www.luogu.org/problem/P2486)
- [「SDOI2014」旅行](https://www.lydsy.com/JudgeOnline/problem.php?id=3531)
+ [「SDOI2014」旅行](https://loj.ac/problem/2195)
+W
\ No newline at end of file
## 习题
- [luogu P2483\[SDOI2010\]魔法猪学院](https://www.luogu.org/problemnew/show/P2483)
+ [「SDOI2010」魔法猪学院](https://www.luogu.org/problemnew/show/P2483)
## 例题
-???+ note "例题 1"
-
-「HEOI2015」小 Z 的房间,可参考 <https://www.lydsy.com/JudgeOnline/problem.php?id=4031> 。
+???+ note "[「HEOI2015」小 Z 的房间](https://loj.ac/problem/2122)"
**解** 矩阵树定理的裸题。将每个空房间看作一个结点,根据输入的信息建图,得到 Laplace 矩阵后,任意删掉 $L$ 的第 $i$ 行第 $i$ 列,求这个子式的行列式即可。求行列式的方法就是高斯消元成上三角阵然后算对角线积。另外本题需要在模 $k$ 的整数子环 $\mathbb{Z}_k$ 上进行高斯消元,采用辗转相除法即可。
-???+ note "例题 2"
-
-「FJOI2007」轮状病毒,可参考 <https://www.lydsy.com/JudgeOnline/problem.php?id=1002> 。
+???+ note "[「FJOI2007」轮状病毒](https://www.luogu.org/problem/P2144)"
**解** 本题的解法很多,这里用矩阵树定理是最直接的解法。当输入为 $n$ 时,容易写出其 $n+1$ 阶的 Laplace 矩阵为:
## 习题
-- [「HAOI2006」聪明的猴子](https://www.lydsy.com/JudgeOnline/problem.php?id=2429)
-- [「SCOI2005」繁忙的都市](https://www.lydsy.com/JudgeOnline/problem.php?id=1083)
+- [「HAOI2006」聪明的猴子](https://www.luogu.org/problem/P2504)
+- [「SCOI2005」繁忙的都市](https://loj.ac/problem/2149)
## 最小生成树的唯一性
}
```
-??? note "[NOI 2018 归程](https://www.luogu.org/problem/P4768)"
+??? note "[NOI 2018 归程](http://uoj.ac/problem/393)"
首先预处理出来每一个点到根节点的最短路。
我们构造出来根据海拔的最大生成树。显然每次询问可以到达的节点是在最小生成树和询问点的最小边权 $\geq p$ 的节点。
--- /dev/null
+author: Anguei
+
+拆点是一种图论建模思想,常用于 [网络流](./flow.md),用来处理 **点权或者点的流量限制** 的问题,也常用于 **分层图**。
+
+## 结点有流量限制的最大流
+
+如果把结点转化成边,那么这个问题就可以套板子解决了。
+
+我们考虑把有流量限制的结点转化成这样一种形式:由两个结点 $u,v$ 和一条边 $<u,v>$ 组成的部分。其中,结点 $u$ 承接所有从原图上其他点的出发到原图上该点的边,结点 $v$ 引出所有从原图上该点出发到达原图上其他点的边。边 $<u,v>$ 的流量限制为原图该点的流量限制,再套板子就可以解决本题。这就是拆点的基本思想。
+
+如果原图是这样:
+
+![](./images/node1.png)
+
+拆点之后的图是这个样子:
+
+![](./images/node2.png)
+
+## 分层图最短路
+
+分层图最短路,如:有 $k$ 次零代价通过一条路径,求总的最小花费。对于这种题目,我们可以采用 DP 相关的思想,设 $\text{dis}_{i, j}$ 表示当前从起点 $i$ 号结点,使用了 $j$ 次免费通行权限后的最短路径。显然, $\text{dis}$ 数组可以这么转移:
+
+ $\text{dis}_{i, j} = \min\{\min\{\text{dis}_{from, j - 1}\}, \min\{\text{dis}_{from,j} + w\}\}$
+
+其中, $from$ 表示 $i$ 的父亲节点, $w$ 表示当前所走的边的边权。当 $j - 1 \geq k$ 时, $\text{dis}_{from, j}$ = $\infty$ 。
+
+事实上,这个 DP 就相当于把每个结点拆分成了 $k+1$ 个结点,每个新结点代表使用不同多次免费通行后到达的原图结点。换句话说,就是每个结点 $u_i$ 表示使用 $i$ 次免费通行权限后到达 $u$ 结点。
+
+??? note "[「JLOI2011」飞行路线](https://www.luogu.org/problem/P4568)"
+ 题意:有一个 $n$ 个点 $m$ 条边的无向图,你可以选择 $k$ 条道路以零代价通行,求 $s$ 到 $t$ 的最小花费。
+
+ 参考核心代码:
+
+ ```cpp
+ struct State { // 优先队列的结点结构体
+ int v, w, cnt; // cnt 表示已经使用多少次免费通行权限
+ State() {}
+ State(int v, int w, int cnt) : v(v), w(w), cnt(cnt) {}
+ bool operator<(const State &rhs) const { return w > rhs.w; }
+ };
+
+ void dijkstra() {
+ memset(dis, 0x3f, sizeof dis);
+ dis[s][0] = 0;
+ pq.push(State(s, 0, 0)); // 到起点不需要使用免费通行权,距离为零
+ while (!pq.empty()) {
+ const State top = pq.top();
+ pq.pop();
+ int u = top.v, nowCnt = top.cnt;
+ if (done[u][nowCnt]) continue;
+ done[u][nowCnt] = true;
+ for (int i = head[u]; i; i = edge[i].next) {
+ int v = edge[i].v, w = edge[i].w;
+ if (nowCnt < k && dis[v][nowCnt + 1] > dis[u][nowCnt]) { // 可以免费通行
+ dis[v][nowCnt + 1] = dis[u][nowCnt];
+ pq.push(State(v, dis[v][nowCnt + 1], nowCnt + 1));
+ }
+ if (dis[v][nowCnt] > dis[u][nowCnt] + w) { // 不可以免费通行
+ dis[v][nowCnt] = dis[u][nowCnt] + w;
+ pq.push(State(v, dis[v][nowCnt], nowCnt));
+ }
+ }
+ }
+ }
+
+ int main() {
+ n = read(), m = read(), k = read();
+ // 笔者习惯从 1 到 n 编号,而这道题是从 0 到 n - 1,所以要处理一下
+ s = read() + 1, t = read() + 1;
+ while (m--) {
+ int u = read() + 1, v = read() + 1, w = read();
+ add(u, v, w), add(v, u, w); // 这道题是双向边
+ }
+ dijkstra();
+ int ans = std::numeric_limits<int>::max(); // ans 取 int 最大值为初值
+ for (int i = 0; i <= k; ++i)
+ ans = std::min(ans, dis[t][i]); // 对到达终点的所有情况取最优值
+ println(ans);
+ }
+ ```
\ No newline at end of file
## 推荐题目
- [USACO Fall/HAOI 2006 受欢迎的牛](https://www.lydsy.com/JudgeOnline/problem.php?id=1051)
+ [USACO Fall/HAOI 2006 受欢迎的牛](https://loj.ac/problem/10091)
[POJ1236 Network of Schools](http://poj.org/problem?id=1236)
开一个 `pre` 数组,在更新距离的时候记录下来后面的点是如何转移过去的,算法结束前再递归地输出路径即可。
比如 Floyd 就要记录 `pre[i][j] = k;` ,Bellman-Ford 和 Dijkstra 一般记录 `pre[v] = u` 。
-
-## 拓展:分层图最短路
-
-分层图最短路,一般模型为有 $k$ 次零代价通过一条路径,求总的最小花费。对于这种题目,我们可以采用 DP 相关的思想,设 $\text{dis}_{i, j}$ 表示当前从起点 $i$ 号结点,使用了 $j$ 次免费通行权限后的最短路径。显然, $\text{dis}$ 数组可以这么转移:
-
- $\text{dis}_{i, j} = \min\{\min\{\text{dis}_{from, j - 1}\}, \min\{\text{dis}_{from,j} + w\}\}$
-
-其中, $from$ 表示 $i$ 的父亲节点, $w$ 表示当前所走的边的边权。当 $j - 1 \geq k$ 时, $\text{dis}_{from, j}$ = $\infty$ 。
-
-事实上,这个 DP 就相当于把每个结点拆分成了 $k+1$ 个结点,每个新结点代表使用不同多次免费通行后到达的原图结点。换句话说,就是每个结点 $u_i$ 表示使用 $i$ 次免费通行权限后到达 $u$ 结点。
-
-### 模板题: [\[JLOI2011\]飞行路线](https://www.lydsy.com/JudgeOnline/problem.php?id=2763)
-
-题意:有一个 $n$ 个点 $m$ 条边的无向图,你可以选择 $k$ 条道路以零代价通行,求 $s$ 到 $t$ 的最小花费。
-
-参考核心代码:
-
-```cpp
-struct State { // 优先队列的结点结构体
- int v, w, cnt; // cnt 表示已经使用多少次免费通行权限
- State() {}
- State(int v, int w, int cnt) : v(v), w(w), cnt(cnt) {}
- bool operator<(const State &rhs) const { return w > rhs.w; }
-};
-
-void dijkstra() {
- memset(dis, 0x3f, sizeof dis);
- dis[s][0] = 0;
- pq.push(State(s, 0, 0)); // 到起点不需要使用免费通行权,距离为零
- while (!pq.empty()) {
- const State top = pq.top();
- pq.pop();
- int u = top.v, nowCnt = top.cnt;
- if (done[u][nowCnt]) continue;
- done[u][nowCnt] = true;
- for (int i = head[u]; i; i = edge[i].next) {
- int v = edge[i].v, w = edge[i].w;
- if (nowCnt < k && dis[v][nowCnt + 1] > dis[u][nowCnt]) { // 可以免费通行
- dis[v][nowCnt + 1] = dis[u][nowCnt];
- pq.push(State(v, dis[v][nowCnt + 1], nowCnt + 1));
- }
- if (dis[v][nowCnt] > dis[u][nowCnt] + w) { // 不可以免费通行
- dis[v][nowCnt] = dis[u][nowCnt] + w;
- pq.push(State(v, dis[v][nowCnt], nowCnt));
- }
- }
- }
-}
-
-int main() {
- n = read(), m = read(), k = read();
- // 笔者习惯从 1 到 n 编号,而这道题是从 0 到 n - 1,所以要处理一下
- s = read() + 1, t = read() + 1;
- while (m--) {
- int u = read() + 1, v = read() + 1, w = read();
- add(u, v, w), add(v, u, w); // 这道题是双向边
- }
- dijkstra();
- int ans = std::numeric_limits<int>::max(); // ans 取 int 最大值为初值
- for (int i = 0; i <= k; ++i)
- ans = std::min(ans, dis[t][i]); // 对到达终点的所有情况取最优值
- println(ans);
-}
-```
## 引子
-???+ note "BZOJ - 2286 消耗战"
+???+ note "[「SDOI2011」消耗战](https://www.luogu.org/problem/P2495)"
### Description
在一场战争中,战场由 $n$ 个岛屿和 $n-1$ 个桥梁组成,保证每两个岛屿间有且仅有一条路径可达。现在,我军已经侦查到敌军的总部在编号为 $1$ 的岛屿,而且他们已经没有足够多的能源维系战斗,我军胜利在望。已知在其他 $k$ 个岛屿上有丰富能源,为了防止敌军获取能源,我军的任务是炸毁一些桥梁,使得敌军不能到达任何能源丰富的岛屿。由于不同桥梁的材质和结构不同,所以炸毁不同的桥梁有不同的代价,我军希望在满足目标的同时使得总代价最小。
对于 $100\%$ 的数据, $2\le n\le 2.5\times 10^5,m\ge 1,\sum k_i\le 5\times 10^5,1\le k_i\le n-1$ 。
- ### Source
-
- [Stage2 day2](http://www.lydsy.com/JudgeOnline/problemset.php?search=Stage2%20day2)
-
## 虚树 Virtual Tree
对于上面那题,我们不难发现——如果树的点数很少,那么我们可以直接跑 DP。
## 习题
- [SPOJ MOD](https://www.spoj.com/problems/MOD/) 模板
-- [SDOI2013 随机数生成器](http://www.lydsy.com/JudgeOnline/problem.php?id=3122)
+- [SDOI2013 随机数生成器](https://www.luogu.org/problem/P3306)
- [BZOJ1319 Discrete Roots](http://www.lydsy.com/JudgeOnline/problem.php?id=1319) 模板
- [SDOI2011 计算器](https://www.luogu.org/problemnew/show/P2485) 模板
- [Luogu4195【模板】exBSGS/Spoj3105 Mod](https://www.luogu.org/problemnew/show/P4195) 目标
[【模板】扩展中国剩余定理](https://www.luogu.org/problemnew/show/P4777)
- [\[NOI2018\]屠龙勇士](https://www.luogu.org/problemnew/show/P4774)
+ [「NOI2018」屠龙勇士](http://uoj.ac/problem/396)
- [\[TJOI2009\]猜数字](https://www.luogu.org/problemnew/show/P3868)
+ [「TJOI2009」猜数字](https://www.luogu.org/problemnew/show/P3868)
- [\[SDOI2010\]古代猪文](https://www.lydsy.com/JudgeOnline/problem.php?id=1951)
+ [「SDOI2010」古代猪文](https://loj.ac/problem/10229)
## 问题二
-??? note "[\[LuoguP3768\]简单的数学题](https://www.luogu.org/problemnew/show/P3768)"
+??? note "[「LuoguP3768」简单的数学题](https://www.luogu.org/problemnew/show/P3768)"
大意:求
$$
[NOIP2017 初赛 T14, T15](https://ti.luogu.com.cn/problemset/1022)
- [NOIP2016 换教室](https://www.luogu.org/problemnew/show/P1850) (概率期望 DP)
+ [NOIP2016 换教室](http://uoj.ac/problem/262) (概率期望 DP)
[同余方程](https://www.luogu.org/problemnew/show/P1082)
- [\[AHOI2005\]洗牌](https://www.lydsy.com/JudgeOnline/problem.php?id=1965)
+ [「AHOI2005」洗牌](https://www.luogu.org/problem/P2054)
- [\[SDOI2016\]排列计数](https://www.luogu.org/problemnew/show/P4071)
+ [「SDOI2016」排列计数](https://www.luogu.org/problemnew/show/P4071)
形如 $ax \equiv b \pmod c$ 的方程被称为 **线性同余方程** (Congruence Equation)。
- [\[NOIp 2012\]同余方程](https://www.luogu.org/problemnew/show/P1082)
+ [「NOIP2012」同余方程](https://www.luogu.org/problemnew/show/P1082)
## 求解方法
## 问题形式
-### [「HAOI 2011」Problem b](https://www.lydsy.com/JudgeOnline/problem.php?id=2301)
+### [「HAOI 2011」Problem b](https://www.luogu.org/problem/P2522)
求值(多组数据)
}
```
-### [「BZOJ 2154」Crash 的数字表格](https://www.lydsy.com/JudgeOnline/problem.php?id=2154)
+### [「BZOJ 2154」Crash 的数字表格](https://www.luogu.org/problem/P1829)
求值(对 $20101009$ 取模)
`simplex` 是主过程,基本思想是找到一个 $c_e>0$ 的,然后找对这个 $e$ 限制最紧的 $l$ ,转动这组 $l,e$ ,注意精度控制 $\epsilon$ , $c_e>\epsilon$ ,还有找 $l$ 的时候 $a_{i,e}>\epsilon$ 才行。
-??? note " 例题[BZOJ1061 志愿者招募](https://www.lydsy.com/JudgeOnline/problem.php?id=1061)"
+??? note " 例题[「NOI2008」志愿者招募](https://www.luogu.org/problem/P3980)"
题目大意:长度为 $n$ 的序列,第 $i$ 位至少 $b_i$ , $m$ 种区间使 $[l_i,r_i] + 1$ 代价为 $a_i$ 。
原始问题 $m$ 个变量, $n$ 个约束,当 $l_j \leq i \leq r_j$ , $a_{ij} = 1$ 。
* * *
-### 例 2 [「BZOJ 3680」吊打 XXX](https://www.lydsy.com/JudgeOnline/problem.php?id=3680)
+### 例 2 [「BZOJ 3680」吊打 XXX](https://www.luogu.org/problem/P1337)
题意:求 $n$ 个点的带权类费马点。
[luogu P1578 奶牛浴场](https://www.luogu.org/problemnew/show/P1578)
- [\[ZJOI2007\]棋盘制作](https://www.lydsy.com/JudgeOnline/problem.php?id=1057)
+ [「ZJOI2007」棋盘制作](https://www.luogu.org/problem/P1169)
### 例题 & 代码
-???+note "例题[小 Z 的袜子](https://www.lydsy.com/JudgeOnline/problem.php?id=2038)"
+???+note "例题[小 Z 的袜子](https://www.luogu.org/problem/P1494)"
题目大意:
有一个长度为 $n$ 的序列 $\{c_i\}$ 。现在给出 $m$ 个询问,每次给出两个数 $l,r$ ,从编号在 $l$ 到 $r$ 之间的数中随机选出两个不同的数,求两个数相等的概率。
### 例题
-???+note "例题[数颜色 BZOJ - 2120](https://www.lydsy.com/JudgeOnline/problem.php?id=2120)"
+???+note "例题[数颜色 BZOJ - 2120](https://www.luogu.org/problem/P1903)"
题目大意:给你一个序列,M 个操作,有两种操作:
这样的话,我们就把一棵树处理成了序列。
-???+note "例题[\[WC2013\]糖果公园](http://uoj.ac/problem/58)"
+???+note "例题[「WC2013」糖果公园](http://uoj.ac/problem/58)"
题意:给你一棵树,每个点有颜色,每次询问
$$\sum_{c}val_c\sum_{i=1}^{cnt_c}w_i$$
- 每个节点都要属于一个块
- 编号相邻的块之间的距离不能太大
-了解了这些条件后,我们看到这样一道题 [\[SCOI2005\]王室联邦](https://www.lydsy.com/JudgeOnline/problem.php?id=1086) 。
+了解了这些条件后,我们看到这样一道题 [「SCOI2005」王室联邦](https://loj.ac/problem/2152) 。
在这道题的基础上我们只要保证最后一个条件就可以解决分块的问题了。
## Example I
-先来看一道网络流题: [「TJOI2015」线性代数](https://www.lydsy.com/JudgeOnline/problem.php?id=3996) 。
+先来看一道网络流题: [「TJOI2015」线性代数](https://loj.ac/problem/2100) 。
我们并不想写网络流,于是开始偷税。建模?不存在的。
## 代码
-此处代码以 [「BZOJ 3680」吊打 XXX](https://www.lydsy.com/JudgeOnline/problem.php?id=3680) (求 $n$ 个点的带权类费马点)为例。
+此处代码以 [「BZOJ 3680」吊打 XXX](https://www.luogu.org/problem/P1337) (求 $n$ 个点的带权类费马点)为例。
```cpp
#include <cmath>
## 习题
-- [「BZOJ 3680」吊打 XXX](https://www.lydsy.com/JudgeOnline/problem.php?id=3680)
-- [「JSOI 2016」炸弹攻击](https://www.lydsy.com/JudgeOnline/problem.php?id=4852)
-- [「HAOI 2006」均分数据](https://www.lydsy.com/JudgeOnline/problem.php?id=2428)
+- [「BZOJ 3680」吊打 XXX](https://www.luogu.org/problem/P1337)
+- [「JSOI 2016」炸弹攻击](https://loj.ac/problem/2076)
+- [「HAOI 2006」均分数据](https://www.luogu.org/problem/P2503)
由于概念过于抽象,我们使用例题讲解。
-??? note " 例题[洛谷 P1048\[NOIP2005 普及组\]采药](https://www.luogu.org/problemnew/show/P1048)"
+??? note " 例题[「NOIP2005 普及组」采药](https://www.luogu.org/problemnew/show/P1048)"
题目大意:有 $N$ 种物品和一个容量为 $W$ 的背包,每种物品有重量 $wi$ 和价值 $vi$ 两种属性,要求选若干个物品(每种物品只能选一次)放入背包使背包中物品的总价值最大且背包中物品的总重量不超过背包的容量。
## 代码构造
## 经典题目
-- [\[kuangbin 带你飞\]专题一 简单搜索](https://vjudge.net/contest/65959)
-- [\[kuangbin 带你飞\]专题二 搜索进阶](https://vjudge.net/contest/65997)
+- [「kuangbin 带你飞」专题一 简单搜索](https://vjudge.net/contest/65959)
+- [「kuangbin 带你飞」专题二 搜索进阶](https://vjudge.net/contest/65997)
## 练习题目
- [UVA #11475 "Extend to Palindrome"](https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2470)
-- [P4555\[国家集训队\]最长双回文串](https://www.luogu.org/problemnew/show/P4555)
+- [「国家集训队」最长双回文串](https://www.luogu.org/problemnew/show/P4555)
* * *
### 例题
-APIO2014|luogu3649 回文串
+[「APIO2014」回文串](https://www.luogu.org/problem/P3649)
建出树来,类似后缀自动机统计出现次数即可
有些题目让我们求关于一个位置与之前所有位置的 LCP 的长度情况。利用 $LCP_{i,j}=\min\{h_{i+1},h_{i+2},...,h_j\}$ 的性质,我们发现这个 $LCP$ 的值是单调递减的。那么我们可以用一个单调栈来维护这些 LCP 值:在新加入元素 $h_{i}$ 时,我们先把所有大于等于 $h_i$ 的值弹出,统计其个数,并将 $h_{i}$ 压入单调栈,个数为弹出的值的总个数加 $1$ 。
-经典题目有 [「AHOI2013」差异](https://www.lydsy.com/JudgeOnline/problem.php?id=3238) 和 [「HAOI2016」找相同字符](https://www.lydsy.com/JudgeOnline/problem.php?id=4566) 。
+经典题目有 [「AHOI2013」差异](https://loj.ac/problem/2377) 和 [「HAOI2016」找相同字符](https://loj.ac/problem/2064) 。
## 习题
## 练习题目
-- [Codeforces - Password\[Difficulty: Easy\]](http://codeforces.com/problemset/problem/126/B)
-- [UVA # 455 "Periodic Strings"\[Difficulty: Medium\]](http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=396)
-- [UVA # 11022 "String Factoring"\[Difficulty: Medium\]](http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=1963)
+- [CF126B Password](http://codeforces.com/problemset/problem/126/B)
+- [UVA # 455 Periodic Strings](http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=396)
+- [UVA # 11022 String Factoring](http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=1963)
- [UVa 11475 - Extend to Palindrome](http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=2470)
- [LA 6439 - Pasti Pas!](https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=588&page=show_problem&problem=4450)
- [Codechef - Chef and Strings](https://www.codechef.com/problems/CHSTR)
- 最小生成树: graph/mst.md
- 最小树形图: graph/mdst.md
- 最短路: graph/shortest-path.md
+ - 拆点: graph/node.md
- 差分约束: graph/diff-constraints.md
- k 短路: graph/kth-path.md
- 连通性相关:
- 图的着色: graph/color.md
- 网络流:
- 网络流简介: graph/flow.md
- - 拆点: graph/flow/node.md
- 最大流: graph/flow/max-flow.md
- 最小割: graph/flow/min-cut.md
- 费用流: graph/flow/min-cost.md