洛谷P1529 回家 Bessie Come Home


P1529 回家 Bessie Come Home

題目描述

現在是晚餐時間,而母牛們在外面分散的牧場中。 農民約翰按響了電鈴,所以她們開始向谷倉走去。 你的工作是要指出哪只母牛會最先到達谷倉(在給出的測試數據中,總會有且只有一只最快的母牛)。 在擠奶的時候(晚餐前),每只母牛都在她自己的牧場上,一些牧場上可能沒有母牛。 每個牧場由一條條道路和一個或多個牧場連接(可能包括自己)。 有時,兩個牧場(可能是字母相同的)之間會有超過一條道路相連。 至少有一個牧場和谷倉之間有道路連接。 因此,所有的母牛最后都能到達谷倉,並且母牛總是走最短的路徑。 當然,母牛能向着任意一方向前進,並且她們以相同的速度前進。 牧場被標記為'a'..'z'和'A'..'Y',在用大寫字母表示的牧場中有一只母牛,小寫字母中則沒有。 谷倉的標記是'Z',注意沒有母牛在谷倉中。

注意'm'和'M'不是同一個牧場 否則錯誤 上面的意思是說:輸入數據中可能會同時存在M,m(郁悶ing)(PS:表郁悶…告訴我set of咋用就不郁悶了…),比如

M a a m m z

輸入輸出格式

輸入格式:

第 1 行: 整數 P(1<= P<=10000),表示連接牧場(谷倉)的道路的數目。

第 2 ..P+1行: 用空格分開的兩個字母和一個整數:

被道路連接牧場的標記和道路的長度(1<=長度<=1000)。

輸出格式:

單獨的一行包含二個項目: 最先到達谷倉的母牛所在說明

翻譯來自NOCOW

USACO 2.4

翻譯來自NOCOW

USACO 2.4

分析:非常裸的一道最短路,因為最多只有52個牧場,所以可以想到用floyd算法,求出每個點之間的最短距離,在讀取的時候如果發現重邊則選長度最短的那條邊即可,最后枚舉一下糧倉到哪個點的距離最短即可,不過輸入的時候要注意:輸入的是字符,有可能將換行符讀取進來,我的建議是用數組讀取,在這里加上\n也是可以的.

 

#include <cstdio>
#include <cstring> #include <iostream> #include <algorithm> using namespace std; int p,flag[210],map[210][210]; int main() { for (int i = 'A'; i <= 'z'; i++) for (int j = 'A'; j <= 'z'; j++) if (i != j) map[i][j] = 100000000; scanf("%d\n",&p); for (int i = 1; i <= p; i++) { char a,b; int c; scanf("%c %c %d\n",&a,&b,&c); if (a >= 'A' && a <= 'Z') flag[a] = 1; if (b >= 'A' && b <= 'Z') flag[b] = 1; map[a][b] = map[b][a] = min(c,map[a][b]); } for (int k = 'A'; k <= 'z'; k++) for (int i = 'A'; i <= 'z'; i++) for (int j = 'A'; j <= 'z'; j++) map[i][j] = min(map[i][j],map[i][k] + map[k][j]); int ans = 100000000; char ans1; for (int i = 'A'; i <= 'Y'; i++) if (flag[i] && map[i]['Z'] < ans) { ans = map[i]['Z']; ans1 = char(i); } printf("%c %d",ans1,ans); return 0; }

 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com