青岛oj集训3

SPFA

  • 最短路:

1.当且仅当不存在负环时存在

2.最短路的长度共经过n个点时,经过n-1条边

3.在0到k的最短路上存在i,j两个点,那么这条路径一定也是i到j的最短路

  • Bellman_Ford单源最短路算法

例题:P3371 【模板】单源最短路径(弱化版) - 洛谷

cin.tie(0)->sync_with_stdio(0);关闭同步流,加快输入速度

或 ios::sync_with_stdio(0),cin.tie(0);

速度:不关同步流cin<scanf<关闭cin

注意:关闭同步流时,scanf 和 cin 不能混用

INT_MAX等价于2147483647

  • BELLMAN-FORD优化:

构造Hack方法:仅有一条超长链,最短路要把所有边跑一遍,优化了白优化

  • 使用Bellman_Ford算法判断负环

例题P3385 【模板】负环 - 洛谷

单源最短路判断负环:

求单源最短路的时候最多只进行n-1轮松弛操作

但当出现负环时,则会一直沿着负环走下去

所以如果执行到了第n轮,那么仅有存在负环这一种可能性

由于例题给的是双向图,所以要正一遍反一遍

然后例题里给的图还可能是不联通的,所以要再标记一下vis,代表1能否到达该点

vis[u[j]] |= vis[v[j]]可达性转移

要是有负环,还得看一眼是否被1经过,没被经过仍然是NO

然后还是可以优化的

 

  • SPFA

 

emplace_back比push_back更快一点

改:(vis清空=0)

作业:1768

posted @ 2025-04-29 21:11  永韶  阅读(12)  评论(0)    收藏  举报