**
time limit: 1000 ms memory limit: 32768 k
total submit: 50(25 users) total accepted: 20(20 users) rating: special judge: no
description
「04.24,和sakura去東京天空樹,世界上最暖和的地方天空樹的頂上。」
「04.26,和sakura去明治神宮,有人在那裡舉辦婚禮。」
「04.25,和sakura去迪士尼,鬼屋很可怕,但是有sakura在,所以不可怕。」
「sakura最好了。」
——江南 《龍族》
繪梨衣和路明非今天要從迪士尼前往天空樹,但他們的錢不多了,所以能省則省,他們現在有乙個地圖上面有n個景點和m條景點之間的路,每條路坐車都需要一定的錢數,現在他們求助於你,請你幫他們計算下從當前地點到目的地最少需要的錢數。
input
有多組資料,每組資料第一行有兩個數字2<=n<=30000,1<=m<=30000。
接下來n行輸入n個地名。
接下來m行每行有兩個字串(長度不超過20)和乙個數字,代表兩地之間的坐車的費用。
接下來一行輸入兩個字串分別代表起點和終點。
output
乙個int數代表最少需要的錢數。
資料保證不會超過int型範圍。
sample input
2 1
disney
tokyoskytree
disney tokyoskytree 1
disney tokyoskytree
sample output
1裸最短路,用map對應上所有地名即可
#include///優先佇列優化
#include
#include
#include
#include
#include
#define ll long long
using
namespace
std;
const
int n=30004;
const
int max=0x7fffffff;
ll dist[n];///記錄到達每個節點的最短路
ll n,m,flag;
struct edge
///結構體建構函式
bool
operator
<(const edge &a)const
///過載運算子
};vector
v[n];///(結構體型別)動態陣列做鄰接矩陣
void dijkstra(int s)
///投入乙個可以到達的點,權值取當前到達節點的已知最短路}}
}int main()
char from[25],to[25];
ll val;
for(int i=0;iscanf("%s %s %lld",from,to,&val);
v[mp[from]].push_back(edge(mp[to],val));
v[mp[to]].push_back(edge(mp[from],val));
}scanf("%s %s",from,to);
dijkstra(mp[from]);
printf("%lld\n",dist[mp[to]]);
}}
旅行問題 (求最短路)
題目 給定乙個n個頂點組成的帶權有向圖的距離矩陣d i,j inf 表示沒有邊 要求從頂點0出發,再回到頂點0 問所經過的邊權重的最小值是多少 5 80 1 3 0 3 4 1 2 5 2 0 4 2 3 5 3 4 3 4 1 6 4 0 7 資料範圍很大,所以用了dijkstr的優化版 incl...
最短路徑之旅行商問題
通過圖 無向圖或有向圖 中所有邊一次且僅一次行遍圖中所有頂點的通路稱為 尤拉通路,通過圖中所有邊一次且僅一次行遍所有頂點的迴路稱為 尤拉迴路。具有 尤拉迴路的圖稱為尤拉圖 euler graph 具有尤拉通路而無尤拉迴路的圖稱為半尤拉圖。和哈密頓迴路相比,哈密頓迴路是所有點僅僅經歷一次。郵遞員問題 ...
GXOI GZOI2019 旅行者 (最短路)
給定乙個有向圖,其中一些頂點為關鍵點。求這些關鍵點兩兩之間最小距離。考試時沒怎麼想寫了50分暴力走了。以為是什麼強連通分量的解法,結果就是個最短路。直接從關鍵點跑一次最短路dis 0 再把圖反向在跑一次最短路dis 1 跑最短路的時候記錄起點col 0 1 那麼最後直接列舉一條邊 x,y,w 當co...