文章

21

粉丝

0

获赞

5

访问

1.8k

头像
有向图最长路径问题 题解:
P5319 四川大学2025年机试题
发布于2026年3月27日 16:16
阅读数 86

 

#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]最终是否可达间接判断,不一定对,...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发