codevs 1079 回家解題報告

2021-08-15 20:48:59 字數 2172 閱讀 6747

1079 回家

時間限制: 1 s

空間限制: 128000 kb

題目等級 : ** silver

題解題目描述 description

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

注意'm'和'm'不是同乙個牧場否則錯誤上面的意思是說:輸入資料中可能會同時存在m,m(鬱悶ing),比如

m a a m m z

輸入描述 input description

第 1 行: 整數 p(1<= p<=10000),表示連線牧場(穀倉)的道路的數目。

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

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

輸出描述 output description

單獨的一行包含二個專案:最先到達穀倉的母牛所在的牧場的標記,和這只母牛走過的路徑的長度。

樣例輸入 sample input

5a d 6

b d 3

c e 9

d z 8

e z 3

樣例輸出 sample output

b 11

資料範圍及提示 data size & hint

首先簡化題意,有很多個點,n條邊,給定每條邊的權值,求某些點到其中乙個點的最短路的最小值。

寫乙個轉化字元的函式,將所有的字母轉化為數字儲存。

inline int atoi(char c)
初始化操作:
cin>>n;

while(n--)

記錄一下存在的點,用鄰接矩陣儲存邊。(由於題目中已說明可能會有重邊,所以加乙個判重,儲存最小邊)

由於是多源最短路問題,很自然就想到利用floyd演算法dp求出所有最短路。

void floyd()

dp[i][j]=m[i][j];

}for(int i=1;i<=26*2;i++)

for(int k=1;k<=26*2;k++)

for(int i=1;i<=26*2;i++)

for(int j=1;j<=26*2;j++)

dp[i][j]=minn(dp[i][j],dp[i][k]+dp[k][j]);

return ;

}

這裡沒有花時間去優化計算(反正也就52^3),求出最短路儲存在dp陣列中。

最後遍歷陣列儲存最短路的最小值即可。

for(int i=1;i<=25;i++)

if(dp[i][p]下面是所有**:

#include using namespace std;

const int inf=1<<30-1;

int m[60][60],dp[70][70];

bool f[60];

int minn(int x,int y)

int main()

floyd();

for(int i=1;i<=25;i++)

if(dp[i][p]}

}char hsh='a'-1+q;

cout

}void floyd()

dp[i][j]=m[i][j];

}for(int i=1;i<=26*2;i++)

for(int k=1;k<=26*2;k++)

for(int i=1;i<=26*2;i++)

for(int j=1;j<=26*2;j++)

dp[i][j]=minn(dp[i][j],dp[i][k]+dp[k][j]);

return ;

}

1445 回家 推薦 的題解

description alice住在森林裡,森林可以看作是n m的網格,森林裡有怪獸,用 表示空地,表示怪獸,v 表示alice現在的位置,j 表示alice的家。alice可以從當前單元格向上下左右相鄰單元格移動,有怪獸的地方也可以走,只不過比較危險,有怪獸的單元格對其他單元格會產生一定的危險係...

NOI2019 回家路線

點此看題 首先可以用暴力dpdp dp艹過去,設dp i j dp i j dp i j 為到了i ii點的時間是j jj的最小花費,由於時間是單向流逝的,我們可以先把邊按出發時間排序,用邊轉移,列舉到達出發點的時間jjj d p y i q i dp x i j cost p i j dp y i...

NOI2019 回家路線

link solution 演算法一通過觀察範圍發現 q leq1000 所以直接暴力拆點 dp 時間複雜度 o 1000m o 能過 演算法二因為有 a times x 2 b times x c 考慮斜率優化。設 f i 表示走完第 i 條邊的最小煩躁值,則 f i min space u i ...