https://www.luogu.com.cn/problem/P5905
思路
先跑spfa找到“势能”以及是否有闭环,然后每个点Dijkstra找最短路。
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 5005;
const int M = 60006;
const int INF = 1e9;
struct edge {
long long v, w, next;
} e[M];
struct node {
int id;
long long w;
const bool operator < (const node &a) const {
return a.w < w;
}
};
int cnt, n, m;
int head[M], inq[M], vis[M], num[N];
long long dis[M], ndis[M];
void add(int u, int v, int w) {
cnt++;
e[cnt].v = v;
e[cnt].w = w;
e[cnt].next = head[u];
head[u] = cnt;

该博客介绍了如何利用Johnson算法解决图论中的全源最短路问题。首先通过SPFA算法确定图中各节点的‘势能’,同时检查是否存在负权闭环。随后,对每个节点分别应用Dijkstra算法求解从源点到该点的最短路径。
最低0.47元/天 解锁文章
615

被折叠的 条评论
为什么被折叠?



