青岛oj集训3
SPFA
-
最短路:
1.当且仅当不存在负环时存在
2.最短路的长度共经过n个点时,经过n-1条边
3.在0到k的最短路上存在i,j两个点,那么这条路径一定也是i到j的最短路
-
Bellman_Ford单源最短路算法

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算法判断负环

单源最短路判断负环:
求单源最短路的时候最多只进行n-1轮松弛操作
但当出现负环时,则会一直沿着负环走下去
所以如果执行到了第n轮,那么仅有存在负环这一种可能性
由于例题给的是双向图,所以要正一遍反一遍
然后例题里给的图还可能是不联通的,所以要再标记一下vis,代表1能否到达该点
vis[u[j]] |= vis[v[j]]可达性转移
要是有负环,还得看一眼是否被1经过,没被经过仍然是NO
然后还是可以优化的
-
SPFA
emplace_back比push_back更快一点

改:(vis清空=0)

作业:1768
本文来自博客园,作者:永韶,转载请注明原文链接:https://www.cnblogs.com/yongshao/p/18779780

浙公网安备 33010602011771号