洛谷——P1529 回家 Bessie Come Home
阿新 • • 發佈:2018-01-06
-o spa 存在 包括 告訴 getch 復制 翻譯 會有
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)。
輸出格式:
單獨的一行包含二個項目: 最先到達谷倉的母牛所在的牧場的標記,和這只母牛走過的路徑的長度。
輸入輸出樣例
輸入樣例#1: 復制5 A d 6 B d 3 C e 9 d Z 8 e Z 3輸出樣例#1: 復制
B 11
說明
翻譯來自NOCOW
USACO 2.4
Floyd跑最短路,然後在輸出最短的道路
註意:有重邊!!!
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define N 61 #define maxn 9999999 using namespacestd; char ch; int n,m,x,y,z,ans,dis[N][N]; int read() { int x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x*f; } int main() { n=60,m=read(); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dis[i][j]=maxn*(i!=j); for(int i=1;i<=m;i++) { cin>>ch; if(ch>=‘A‘&&ch<=‘Z‘) x=ch-‘A‘+1; else x=ch-‘a‘+27; cin>>ch; if(ch>=‘A‘&&ch<=‘Z‘) y=ch-‘A‘+1; else y=ch-‘a‘+27; z=read(); dis[x][y]=min(dis[x][y],z); dis[y][x]=dis[x][y]; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); ans=maxn; for(int i=1;i<=25;i++) if(dis[i][26]<ans) { ch=i+‘A‘-1; ans=dis[i][26]; } cout<<ch<<" "<<ans; return 0; }
洛谷——P1529 回家 Bessie Come Home