文章

99

粉丝

120

获赞

8

访问

110.0k

头像
P1807 最长路
备考心情
发布于2024年8月28日 11:17
阅读数 1.2k

#include <bits/stdc++.h>

#define int long long
#define PII pair<int,int>
#define MP make_pair
#define INF LONG_LONG_MAX
using namespace std;
int n, m;
vector<PII > g[1510];//个人喜好用 vector 建图,但更推荐邻接表
int dis[1510];
bool vis[1510];

void spfa(int s) {
    queue<int> q;
    q.push(s);//把初始点加入队列
    fill(dis + 1, dis + 1 + n, INF);//因为一开始所有点都到不了,所以初始化为INF,不能设置为-INF!!!
    dis[s] = 0;//自己到自己肯定距离为0
    while (!q.empty()) {
        int u = q.front();//从队列里取出第一个元素
        q.pop();
        for (int i = 0; i < g[u].size(); i++) {
            int v = g[u][i].first, w = g[u][i].second;
            if (dis[v] > dis[u] + w) {//松弛操作
                dis[v] = dis[u] + w;
                q.push(v);
            }
            //如果能松弛成功,那么松弛,把松弛成功的目标点放入队列
        }
    }
}

signed main() {
    cin >> n >> m;
    for (int i = 1; i <= m; i++) {
        int u, v, w;
        cin >> u >> v >> w;
        g[u]....
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发