邻接表未用堆优化diji60分求调
查看原帖
邻接表未用堆优化diji60分求调
1254795
Dusk777楼主2024/5/30 09:03
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const long long inf = 2147483647;

struct adjnode {
    ll goal;
    ll w;
};

int main() {
    ll n, m, s;
    cin >> n >> m >> s;

    vector<vector<adjnode>> adj(n + 1);
    vector<ll> dist(n + 1, inf);
    vector<ll> vis(n + 1, 1);

    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

    for (int i = 1; i <= m; i++) {
        ll u, v, w;
        cin >> u >> v >> w;
        adjnode tmp;
        tmp.goal = v;
        tmp.w = w;
        adj[u].push_back(tmp);
    }

    dist[s] = 0;
    vis[s] = 0;
    ll start = s;
    ll next = 0;

    while (1) {
        ll Min = inf;
        for (int i = 0; i < adj[start].size(); i++) {
            dist[adj[start][i].goal] = min(dist[adj[start][i].goal], adj[start][i].w + dist[start]);
            if (vis[adj[start][i].goal] && dist[adj[start][i].goal] < Min) {
                next = adj[start][i].goal;
                Min = dist[adj[start][i].goal];
            }
        }
        if (Min == inf) {
            break;
        }
        start = next;
        vis[start] = 0;
    }

    for (int i = 1; i <= n; i++) {
        cout << dist[i];
        if (i != n) {
            cout << " ";
        }
    }

    return 0;
}
2024/5/30 09:03
加载中...