文章
21
粉丝
0
获赞
19
访问
3.3k
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
int main() {
int n, m, S, T;
cin >> n >> m >> S >> T;
vector<vector<int>> edges(m); // 存储所有边:u, v, w
for (int i = 0; i < m; ++i) {
int u, v, w;
cin >> u >> v >> w;
edges[i] = {u, v, w};
}
// 初始化距离:LLONG_MIN=不可达,起点S距离为0
vector<long long> dist(n, LLONG_MIN);
dist[S] = 0;
// Bellman-Ford松弛n-1次(最长路径核心)
for (int i = 0; i < n - 1; ++i) {
for (auto& e : edges) {
int u = e[0], v = e[1], w = e[2];
if (dist[u] != LLONG_MIN && dist[v] < dist[u] + w)
dist[v] = dist[u] + w;
}
}
// 检测正环(能影响S→T路径的正环)
bool has_cycle = false;
for (auto& e : edges) {
int u = e[0], v = e[1], w = e[2];
// 条件:u可达 + v能到T(通过dist[v]最终是否可达间接判断,不一定对,...
登录后发布评论
暂无评论,来抢沙发