1 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int INF = 2147483647; const int MAXN = 1000; const int MAXM = 100000; int n, m; // 正图 0、反图 1,实际上 [2][MAXN+5] 可能会更快一点 vector<pair<int, int>> e[MAXN + 5][2]; int dis[MAXN + 5][2]; bool vis[MAXN + 5]; priority_queue<pair<int, int>> pq; void dijkstra(int s, int typ) { for (int i = 1; i <= n; i++) { dis[i][typ] = INF; vis[i] = false; } dis[s][typ] = 0; pq.push({-0, s}); while (!pq.empty()) { int u = pq.top().second; pq.pop(); if (vis[u]) continue; vis[u] = true; for (int i = 0; i < e[u][typ].size(); i++) { int v = e[u][typ][i].first; int w = e[u][typ][i].second; if (dis[u][typ] + w < dis[v][typ]) { dis[v][typ] = dis[u][typ] + w; pq.push({-dis[v][typ], v}); } } } } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for (int i = 1; i <= m; i++) { int u, v, w; cin >> u >> v >> w; e[u][0].push_back({v, w}); e[v][1].push_back({u, w}); } dijkstra(1, 0); dijkstra(1, 1); int ans = 0; for (int i = 2; i <= n; i++) ans += dis[i][0] + dis[i][1]; cout << ans; return 0; }
- 1
信息
- ID
- 2422
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 14
- 已通过
- 8
- 上传者