寒假day4 2.6

讲师:张尊喆,NOI2021Au,rk49,卡线Au,from 石家庄第二中学。拜谢叉院!

qq:1607432325

mail:1607432325@qq.com

图论

存图

  • 链表(网络流)

  • vector

从一点出发的最后一条边向前跳。

并查集

两种操作——查询、合并两个集合。

对于每个集合设置一个代表元素。

启发式合并+路径压缩 \(O(αn)\)

启发式合并

这里给出复杂度证明。

先不给了。

带权并查集

感性理解,维护集合关系时维护边权。

种类并查集

食物链

相比普通并查集,多了一个天敌的关系。

对于 \(x\),建三个点,表示分属三类。

一种比较新颖的思路。

面对操作进行异域连边。

不如好好研究一下带权并查集做法。

但这种思考方式比较有趣。

CEOI1999 Parity Game

套路题,变成前缀中 \(1\) 的奇偶性,令 \(s_x\) 代表前缀中 \(1\) 的个数。

本质上就是 \(s_y-s_x\) 的奇偶性。

等于奇数,则代表奇偶性不同;否则相同。

利用上一题的思想做种类并查集。

不如好好研究一下带权并查集做法。

如果奇偶性相同,就连一条边权为 \(0\) 的边,否则 \(1\)

总之具有传递性,可以路径压缩。

路径压缩可以维护\(\% 2\) 意义下的加法,相当于做异或。

白雪皑皑

序列并查集

考虑倒着操作,这样不会出现下一次会覆盖前一次这种操作,经典时光倒流类题目。

只需要考虑每个点第一次被染色的情况。

如何快速找到没有被染色过的点?

用并查集维护下一个没被染色的点。

易维护。

染色时每次 find(l)

易染色。

经典套路。

时间复杂度 \(O(n)\)

连续攻击游戏

发现只有两种属性,而图是有一种二元关系的。

对应属性连边,抽象地把边看做武器,显然,一条边对应一个点。

对于环/基环树,显然每个点都可以满足。

对于非基环树的无根树,显然根不能满足,所以选最大值当根,最后就是每个联通块不能满足的取最小值。

注意,重边也算环。

绝世好题。

最小生成树

性质:边权和最小,边权最大值最小。

非联通图只有生成森林。

Kruskal

贪心的连,并查集维护,不过多阐述。

证明

归纳法。

听不太懂。感性理解

但感觉调整法更容易证。

时间复杂度 \(O(m\log n)\)

Prim

没什么用。

从节点开始,不断加点。

贪心的每次往里面加连接生成树集合与补集的边权最小的边。

可以用堆优化。

营救

借鉴最小生成树的思想。

最小生成树有一个优美的性质,在所有 \(s\sim t\) 的所有路径中,最小生成树上的那一条路径最大值最小。

做法显然。

CF1245 D

要学会把未知的问题变成已知的问题

新建一个超级源点,与所有点连边,边权为 \(c_i\),进行一遍 Kruskal 即可。

从意义上理解,可以把源点视作电力来源之类的东西。

从数学上理解,调整法可以证明。

P8074

考虑按照 \(x,y,z\) 排序,根据贪心思想只需对 \(x_{i-1},x_i\) 连边,其余两维也是如此。

随后进行一遍 Kruskal 。

根据调整法可以证明。

Kuglarz

没听懂,等晚上再看吧。

货车运输

经典题。

首先利用生成树的性质,建出一棵最大生成树。至于两点间路径最小值——显然路径是“起点——LCA——终点”,倍增乱搞即可通过。

严格次小生成树

结论:一定是拿非树边换最小生成树的某一条边。

枚举非树边,换最大值/次大值。

倍增求出最大值/次大值。

CF827D

  • 对于非树边,应该求出路径上的最大值,尝试把最大值替代掉,显然,会出现在每一种最小生成树上,因为最大值都在原先最大值都在最小生成树上了。

  • 对于树边,一定不能被非树边替代掉,应该小于非树边的最小值。

考虑怎么求最小值。利用从大到小区间的倍增。相当于把原来的操作反过来。

从大到小进行转移。向线段树一样下放 tag。

总之比较抽象。

最短路

floyd

本质是 dp。

spfa

P4667

01bfs

考虑对于一个格子中,原电线代价为 \(0\),翻转后的电线为 \(1\),进行 01bfs。

注意到可能对电线转两次,使得最短路中仍然是正确的。

但是我们发现,一个格子最多只有两个点可以到达(左上、右下/左下、右下)。

01bfs

一张图,边权为 \(0/1\),求最短路。

考虑 bfs 原理。

显然,队列中一定前面部分的最短路为 dis,后面部分为 \(dis+1\)

发现通过边权为 \(0\) 的边,最短路仍为 dis,所以把结果扔到队头,进行扩展。

对于边权为 \(0\sim k,k/le 10\),求最短路。

可以开 \(k+1\) 个桶,每个桶存 \(dis+0,dis+1\ldots dis+k\) 的状态。

时间复杂度 \(O(n+m)\),空间复杂度 \(O(nk)\)

P1462

触发关键词,二分。

对于 \(k\),显然,不应该考虑 \(>k\) 的城市,对剩下城市跑最短路后 check。

P1144

计数题

分三种情况讨论。

  • \(dis_y>dis_x+w\)\(f_y=f_x\)

  • \(dis_y<dis_x+w\),不用操作

  • \(dis_y=dis_x+w\)\(f_y+=f_x\)

P1119

考察对 floyd 的理解。

你连 floyd 都没理解好你做什么啊

P4822

经典分层图。

细节:对每层的 \(n\) 点的最短路取最小值。

负环

spfa又活了回来

从 spfa 的原理出发。

你连spfa都没理解好你做什么啊

USACO07DEC

面对除法,应该选择 01分数规划/斜率。

把环上的边权赋为 \(KE-F\),check 是否有负环。

骑士游戏

考虑 dp。

\(f_x\) 代表消除怪物 \(x\) 至少需要多少代价。

\(f_x=\min(K_x,\sumf_y+S_x)\)

后面没听。

P2371

同余最短路

显然听不懂。

时间复杂度 \(O(n\times a_1\times log n)\)

一塌糊涂。

差分约束

发现类似一个三角不等式的东西。

然后建一个奇奇怪怪的图,判断有无负环。

P4878

赛车游戏

显然不会
hu
\(1\le dis_y-dis_x\le 9\)

差分约束的妙用。

拓扑排序

感性理解含义。

只能对 DAG 拓扑排序。

Andrew and Taxi

显然二分答案。

神奇证明。

车站分级

看题解,建超级源点后拓扑排序+dp乱搞。

P3243

假。

倒着考虑。

建反图以后拓扑排序乱搞。

下午听课没有激情。

基环树

CF027F

借鉴 连续攻击游戏 的思路。

P1453

拆掉一条边后用树形dp求树的最大独立集。

posted @ 2024-02-06 10:11  BYR_KKK  阅读(23)  评论(0编辑  收藏  举报