人生最困难的事情是认识自己。———特莱斯
最近全面深入学习了有关图论、数学、搜索&二分以及数据结构的提高版本。感觉还是比较蒙的,但我也在 WA 与 AC 之间的徘徊中感到了满足于充实。这里具体说说我对所学知识的梳理与认识。
1. 图论
在最基本的最短路问题之后,我们复习了有关的差分约束,回顾了大名鼎鼎的 Tarjan 以及最小生成树 (Kruskal) 的有关内容。应该说那几天过得还是比较轻松的 。(至少和后面的比起来)
紧接着又学习了二分图与匈牙利算法,还有令人头秃的网络流。然后我就发现图论中最难的原来是怎样建图!线段树优化建图可以大大减少所需建边的数量,从而节省空间。看来不管是在哪一门学问都以综合为上啊!
2. 数学
然后就到了令人闻风丧胆的数学模块了。那个莫比乌斯反演直接蓝题起步好吧。推柿子是核心。原本我以为这就到头了。结果还有更丧心病狂的 FFT、NTT 。唉,幸好不考,歌以咏志。
3. 搜索&二分
别看这俩算法基础,有些与数据结构一结合也不好想的。就拿这道题来说,这谁能看出这是二分答案+线段树啊…要想写对搜索过样例很简单,可是如何设计一个恰到好处的估价函数或搜索方式可是难上加难啊。
4. 数据结构
下面就到了重头戏了,数据结构!要说具体的数据结构那是数不胜数,而比较出名的高级数据结构就主要是线段树、主席树以及平衡树。和线段树比起来,以 Splay 为首的平衡树是真的恶心。不过多想想还是大有裨益的。
下面举几个经典的例子来具体分析一下。
先分析一下,一共有两种攻击方式,而最后所有的怪兽一定会被法术攻击杀死。也就是说我们需要比较 主怪兽法术消耗 与 (主怪兽物理消耗+分怪兽法术消耗) 的大小。类比 SPFA 的松弛操作,可以用 SPFA 的队列处理。
这题是非常经典的搜索剪枝,注意接木棍的时候按从大到小的顺序,长木棍一定比短木棍更优,因为短木棍能比长木棍处理更刁钻的情况。
非常巧妙的一道题。当修改左子树的物品时,右子树的物品就是一个裸的01背包,二分处理即可。