3 条题解
-
-2
#include <bits/stdc++.h> using namespace std;
int n, m; int s,t; int a[1010][1010]; vector adj[1010];
int dis[1010]; int vis[1010];
int path[1010];
struct Node { int v,d; bool operator < (const Node &a) const { return d > a.d; } };
void dijkstra() {
memset(dis, 0x3f, sizeof(dis)); memset(vis, 0, sizeof(vis)); priority_queue<Node> q; q.push({s, 0}); dis[s] = 0; while (!q.empty()) { Node node = q.top(); q.pop(); int u = node.v; if (u == t) { break; } if (vis[u]) { continue; } vis[u] = 1; for (int i = 0;i < adj[u].size();++i) { int v = adj[u][i]; int ndis = dis[u] + a[u][v]; if (ndis < dis[v]) { dis[v] = ndis; path[v] = u; q.push({v, ndis}); } } }
}
int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m >> s >> t;
for (int i = 0; i < m; i++) { int u, v, w; cin >> u >> v >> w; if (a[u][v] == 0 || w < a[u][v]) { if (a[u][v] == 0) { adj[u].push_back(v); adj[v].push_back(u); } a[u][v] = w; a[v][u] = w; } } dijkstra(); if (dis[t] == 0x3f3f3f3f) { cout << "can't arrive" << endl; return 0; } cout << dis[t] << endl; vector<int> ans; while (t ) { ans.push_back(t); t = path[t]; } for (int i = ans.size() - 1; i >= 0; i--) { cout << ans[i] << " "; } return 0;
}
信息
- ID
- 2366
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 7
- 标签
- 递交数
- 16
- 已通过
- 9
- 上传者