1. 程式人生 > >luogu P1529 回家 Bessie Come Home

luogu P1529 回家 Bessie Come Home

輸入輸出 span pri int 意思 nbsp urn 長度 end

題目描述

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

folyd

建邊時要取min不然會被卡

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define N 410

int map[N][N];
bool have[N];
int n,ans=0x7fffffff;
char A,B,who; int main() { memset(map,0x3f,sizeof(map)); scanf("%d",&n); int t; for(int i=1;i<=n;i++) { cin>>A>>B>>t; //cout<<A<<" "<<B<<endl; if(A>=A&&A<=Z)have[A]=1; if(B>=A&&B<=Z)have[B]=1; map[A][B]=min(map[A][B],t); map[B][A]=min(map[A][B],map[B][A]); } 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]); for(int i=A;i<=Y;i++) if(have[i]&&map[i][Z]<ans) ans=map[i][Z], who=(char)i; printf("%c %d\n",who,ans); return 0; }

luogu P1529 回家 Bessie Come Home