今日小事祭
将树状数组1.2打过
树状数组2是区间加,单点查
然而树状数组只能进行单点修改,区间查
考虑差分
1 2 4 6 9
1 2 2 3
^ ^
+k -k (区间加时,树状数组单点修改)
将差分维护一个单缀和(树状数组维护差分前缀和)所以第k个点的值即为k的前缀和
将线段树2调过!!!
维护乘法即为 \((ax+b)*k+c=ak+bk+c\)
原则为先乘后加,乘时add标记也要\(*k\)
学习了单源最短路,贝尔曼·福德(O(n*n))
枚举i的子节点u,若dis[i]+边权w<dis[u],则更新dis[u],相当于松弛操作。若某个节点的所有子节点都无法进行松弛,则完成(感性理解qwq)
SPFA优化
将所有重复考虑的松弛操作优化,将能松弛dis[u]的u加入队列。vis[u]维护u是否在队列中,若在则不重复添加,跑到队列空为止。
SPFA判负环
因为有 \(n-1\) 条边,所以若一条边被重复添加 \(n\) 次就一定有负环
今日模拟赛
- T1:离散化,2h切了,但数组开小了,RE了最后一个点,T w T
- T2: 错误的贪心使我浪费了2h的青春,本质是一个差分约束+spfa
- T3,4:没时间看,大寄!