JZOJ1274.【USACO題庫】2.4.4 Bessie Come Home回家
阿新 • • 發佈:2019-02-02
題目描述
現在是晚餐時間,而母牛們在外面分散的牧場中。
農民約翰按響了電鈴,所以她們開始向穀倉走去。
你的工作是要指出哪隻母牛會最先到達穀倉(在給出的測試資料中,總會有且只有一隻速度最快的母牛)。
在擠奶的時候(晚餐前),每隻母牛都在她自己的牧場上,一些牧場上可能沒有母牛。
每個牧場由一條條道路和一個或多個牧場連線(可能包括自己)。
有時,兩個牧場(可能是自我相同的)之間會有超過一條道路相連。
至少有一個牧場和穀倉之間有道路連線。
因此,所有的母牛最後都能到達穀倉,並且母牛總是走最短的路徑。
當然,母牛能向著任意一方向前進,並且她們以相同的速度前進。
牧場被標記為’a’..’z’和’A’..’Y’,在用大寫字母表示的牧場中有一隻母牛,小寫字母中則沒有。
穀倉的標記是’Z’,注意沒有母牛在穀倉中。
PROGRAM NAME: comehome
INPUT FORMAT
第 1 行: 整數 P(1<= P<=10000),表示連線牧場(穀倉)的道路的數目。
第 2 ..P+1行: 用空格分開的兩個字母和一個整數:
被道路連線牧場的標記和道路的長度(1<=長度<=1000)。
SAMPLE INPUT (file comehome.in)
5
A d 6
B d 3
C e 9
d Z 8
e Z 3
OUTPUT FORMAT
單獨的一行包含二個專案:
最先到達穀倉的母牛所在的牧場的標記,和這隻母牛走過的路徑的長度。
SAMPLE OUTPUT (file comehome.out)
B 11
輸入
輸出
樣例輸入
樣例輸出
資料範圍限制
這道題是很久以前做的了,現在寫一寫
一道裸的最短路,注意兩個牧場間取最短的路,才只有26個點,AC妥妥的
type
arr=array['A'..'z','A'..'z']of longint;
var
n,x,min:longint;
ch,i,j,k,ans:char;
a:arr;
begin
readln(n);
for min:=1 to n do
begin
readln(i,k,j,x);
if (x<a[i,j])or(a[i,j]=0) then
begin
a[i,j]:=x;
a[j,i]:=x;
end;
end;
for ch:='A' to 'z' do
for i:='A' to 'z' do
for j:='A' to 'z' do
begin
if (a[i,ch]>0)and(a[ch,j]>0) then
begin
if (a[i,j]>a[i,ch]+a[ch,j])or(a[i,j]=0)then
begin
a[i,j]:=a[i,ch]+a[ch,j];
a[j,i]:=a[i,ch]+a[ch,j];
end;
end;
end;
min:=maxlongint;
for i:='A' to 'Y' do
begin
if (min>a['Z',i]) and (a['Z',i]<>0) then
begin
ans:=i;
min:=a['Z',i];
end;
end;
writeln(ans,' ',min);
end.