洛谷P1629 郵遞員送信【最短路】
題目連結:P1629 郵遞員送信
程式說明:
注意每次只能拿一件物品,送到目的地後必須返回起點才能送下一件。
因此可以將題目轉化為:從1號點到其餘各點的最短路,再加上其餘各點到1號點的最短路即為正確答案。
求多個點到1號點的最短路,可以將鄰接矩陣座標互換(即將有向圖反轉)。
程式碼如下:
#include <iostream>
#include <cstring>
using namespace std;
const int N = 1010, M = 100010;
int g[N][N], dist[N], st[N], n, m, res;
void dijkstra() {
memset(dist, 0x3f, sizeof dist);
memset(st, 0, sizeof st);
dist[1] = 0;
for(int i = 0; i < n; i++) {
int t = -1;
for(int j = 1; j <= n; j++)
if(!st[j] && (t == -1 || dist[j] < dist[t]))
t = j;
st[t] = 1;
for(int j = 1; j <= n; j++)
dist[j] = min(dist[j], dist[t] + g[t][j]);
}
}
int main() {
memset(g, 0x3f, sizeof g);
cin>>n>>m;
while(m--) {
int x, y, z;
cin>>x>>y>>z;
g[x][y] = min(g[x][y], z);
}
dijkstra();
for(int i = 1; i <= n; i++)
res += dist[i];
//將圖反轉
for(int i = 1; i <= n; i++)
for(int j = i + 1; j <= n; j++)
swap(g[i][j], g[j][i]);
dijkstra();
for(int i = 1; i <= n; i++)
res += dist[i];
cout<<res;
return 0;
}
相關文章
- [題解]P1629 郵遞員送信
- 洛谷 P1144 最短路計數 做題記錄
- 二叉樹 遞迴 洛谷P1364二叉樹遞迴
- 洛谷
- 洛谷P4550 收集郵票 題解 期望DP
- 洛谷-P1171-售貨員的難題
- 洛谷團隊
- 最短路:求最長最短路
- 最短路 || 最長路 || 次短路
- 洛谷死亡時間
- 洛谷P1786
- 洛谷 - P5369
- 洛谷P6786
- 洛谷P10725
- 洛谷P10693
- 洛谷 - P6190
- 洛谷——玩具謎題
- 英雄聯盟(洛谷)
- 洛谷網校學習
- 昨天放洛谷的圖
- 將洛谷私信接入WindowsWindows
- 洛谷 P10254 口吃
- 洛谷傻逼之處
- 洛谷八皇后問題
- 洛谷 P3958乳酪
- 【洛谷】【分支】月份天數
- 洛谷 P11323 Happy CardAPP
- 洛谷P1784.數獨
- 洛谷題單指南-字串-Test字串
- 洛谷P3853總結
- 洛谷-P9574 題解
- 洛谷-P9830 題解
- 洛谷p1048 採藥
- 洛谷-P1250 種樹
- 洛谷 P1161 開燈
- 洛谷 P1219 八皇后
- 洛谷P1087 FBI樹
- 洛谷題型摘選(三)