51NOD1459 迷宮遊戲

2021-08-04 17:41:58 字數 1378 閱讀 3787

1459

迷宮遊戲

基準時間限制:

1 秒 空間限制:

131072

kb 分值: 0

難度:基礎題

你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的起點和終點房間,你首要目標是從起點盡快到達終點,在滿足首要目標的前提下,使得你的得分總和盡可能大。現在問題來了,給定房間、道路、分數、起點和終點等全部資訊,你能計算在盡快離開迷宮的前提下,你的最大得分是多少麼?

input

第一行4個整數n (<=500), m, start, end。n表示房間的個數,房間編號從0到(n - 1),m表示道路數,任意兩個房間之間最多只有一條道路,start和end表示起點和終點房間的編號。

第二行包含n個空格分隔的正整數(不超過600),表示進入每個房間你的得分。

再接下來m行,每行3個空格分隔的整數x, y, z (0

output

一行,兩個空格分隔的整數,第乙個表示你最少需要的時間,第二個表示你在最少時間前提下可以獲得的最大得分。
input示例

3 2 0 2

1 2 3

0 1 10

1 2 11

output示例

21 6
題意:  給出 房間個數,道路數,起點終點。讓求在最短時間內的最大得分。

比較模板最短路徑,只是多出了個最大得分,肯定是在有多個時間相同的情況下,再多加乙個得分的判斷就行了

#include #define node pairusing namespace std;

const int ax = 500+66;

const int inf = 0x7777777;

int n , m , start , end;

node mp[ax][ax];

int w[ax];

void floyd()else if(mp[i][j].first == mp[i][k].first + mp[k][j].first)

}} }

}int main()

int x,y,z;

for(int i = 0 ; i < n ; i++ )

mp[i][j].first = inf;

} }for(int i = 0 ; i < m ; i++)

mp[x][y].second = w[y];

mp[y][x].second = w[x];

} floyd();

cout<

51Nod 1459 迷宮遊戲

你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的起點和終點房間,你首要目標是從起點盡快到達終點,在滿足首要目標的前提下,使得你的得分總和盡可能大...

51NOD 1459 迷宮遊戲

1459 迷宮遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的...

51nod 1459 迷宮遊戲

你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的起點和終點房間,你首要目標是從起點盡快到達終點,在滿足首要目標的前提下,使得你的得分總和盡可能大...