1. 程式人生 > >JZOJ1274.【USACO題庫】2.4.4 Bessie Come Home回家

JZOJ1274.【USACO題庫】2.4.4 Bessie Come Home回家

題目描述

現在是晚餐時間,而母牛們在外面分散的牧場中。

農民約翰按響了電鈴,所以她們開始向穀倉走去。

你的工作是要指出哪隻母牛會最先到達穀倉(在給出的測試資料中,總會有且只有一隻速度最快的母牛)。

在擠奶的時候(晚餐前),每隻母牛都在她自己的牧場上,一些牧場上可能沒有母牛。

每個牧場由一條條道路和一個或多個牧場連線(可能包括自己)。

有時,兩個牧場(可能是自我相同的)之間會有超過一條道路相連。

至少有一個牧場和穀倉之間有道路連線。

因此,所有的母牛最後都能到達穀倉,並且母牛總是走最短的路徑。

當然,母牛能向著任意一方向前進,並且她們以相同的速度前進。

牧場被標記為’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.