练习题目:
最长路 - 洛谷https://www.luogu.com.cn/problem/P1807
求单源最短路问题,有dij和spfa两种解法,而spfa相较于dij优点在于其边权可以为负值,且可以用来判断正环与负环。
因为很多题解写的都是单源最短路,那我就写一篇单源最长路(其实代码就几个符号的区别)。
spfs算法的精髓在于,利用队列,如果一个数在队列中,那么该数对应的vis数组为1,否则为0;
然后遍历基本上所有的出边,所以时间按复杂度还是比较高的,先上一段代码:
void spfa(){
queue<int>q;
q.push(1);
vis[1]=1;
dis[1]=0;
while(!q.empty()){
int a=q.front();
q.pop();
vis[a]=0;
for(int i=head[a];i!=-1;i=edge[i].next){
int b=edge[i].v;
if(dis[b]<dis[a]+edge[i].w){
dis[b]