【日常學習】【最短路Dijkstra】codevs1069 usaco回家 題解,dijkstracodevs1069
來源 usaco codevs1069
題目描述
Description
現在是晚餐時間,而母牛們在外面分散的牧場中。 農民約翰按響了電鈴,所以她們開始向穀倉走去。 你的工作是要指出哪只母牛會最先到達穀倉(在給出的測試資料中,總會有且只有一隻最快的母牛)。 在擠奶的時候(晚餐前),每隻母牛都在她自己的牧場上,一些牧場上可能沒有母牛。 每個牧場由一條條道路和一個或多個牧場串連(可能包括自己)。 有時,兩個牧場(可能是字母相同的)之間會有超過一條道路相連。 至少有一個牧場和穀倉之間有道路串連。 因此,所有的母牛最後都能到達穀倉,並且母牛總是走最短的路徑。 當然,母牛能向著任意一方向前進,並且她們以相同的速度前進。 牧場被標記為'a'..'z'和'A'..'Y',在用大寫字母表示的牧場中有一隻母牛,小寫字母中則沒有。 穀倉的標記是'Z',注意沒有母牛在穀倉中。
注意'm'和'M'不是同一個牧場否則錯誤上面的意思是說:輸入資料中可能會同時存在M,m(鬱悶ing),比如
M a a m m z
輸入描述
Input Description
第 1 行: 整數 P(1<= P<=10000),表示串連牧場(穀倉)的道路的數目。
第 2 ..P+1行: 用空格分開的兩個字母和一個整數:
被道路串連牧場的標記和道路的長度(1<=長度<=1000)。
輸出描述
Output Description
單獨的一行包含二個項目:最先到達穀倉的母牛所在的牧場的標記,和這隻母牛走過的路徑的長度。
範例輸入
Sample Input
5
A d 6
B d 3
C e 9
d Z 8
e Z 3
範例輸出
Sample Output
B 11
這是比較裸的最短路 只要從Z點開始找單源最短路即可 dij和floyed都可以 關鍵在於處理
我處理的方法是小寫字母在前二十六個格子 大寫字母在後二十六個 尤其要注意讀入字元時的預先處理 由於有空格用scanf的話要這樣寫
scanf("%d\n",&p);scanf("%c %c %d\n",&c1,&c2,&k);
其他要注意的幾點是:1.無向圖2.可以重邊3.可以自環 這些在init的時候都可以解決掉
基本思路:預先處理化為數字,從最後一個點找單源最短路,在所有大寫字母中找最小的
放代碼:
——待燃犀下看,憑欄卻怕,風雷怒,魚龍慘。