题面 题解(单源最短路) 代码(spfa) #include<bits/stdc++.h> using namespace std; const int N = 2510, M = 6200 * 2 + 10; int n, m, S, T; int h[N], e[M], ne[M], w[M], idx; int dist[N]; bool st[N]; void add(int a, int b, int c) { e[idx] = b; w[idx] = c; ne[idx] = h[a]; h[a] = idx++; } void spfa() { memset(dist, 0x3f, sizeof dist); dist[S] = 0; queue<int> q; q.push(S); st[S] = true; while (q.size()) { int t = q.front(); q.pop(); st[t] = false; for (int i = h[t]; i != -1; i = ne[i]) { int j = e[i]; if (dist[j] > dist[t] + w[i]) { dist[j] = dist[t] + w[i]; if (!st[j]) { st[j] = true; q.push(j); } } } } } int main() { memset(h, -1, sizeof h); cin >> n >> m >> S >> T; for (int i = 0; i < m; i++) { int a, b, c; cin >> a >> b >> c; add(a, b, c), add(b, a, c); } spfa(); cout << dist[T] << endl; return 0; }