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 表示道路,表示從房間x到房間y(雙向)的道路,注意,最多只有一條道路鏈結兩個房間, 你需要的時間為z。
輸入保證從start到end至少有一條路徑。
output
一行,兩個空格分隔的整數,第乙個表示你最少需要的時間,第二個表示你在最少時間前提下可以獲得的最大得分。
input示例
3 2 0 2
1 2 3
0 1 10
1 2 11
output示例
21 6
題解:在鬆弛操作中。優先判斷路程,在路程相等時判斷價值,過程中維護價值的最大值。
**:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define bababaa printf("!!!!!!!\n")
#define ll long long
using
namespace
std;
const
int n=1005;
int vis[n];
int ans[n];
int point[n];
int dis[n];
int head[n<<1];
int n,m,t,cont,x,y,z,st,en;
struct node
edge[n*n*2];
void add(int from,int to,int cost)
void spfa(int x)
}else
if(dis[v]==dis[u]+c)}}
}}
printf("%d %d\n",dis[en],ans[en]+point[st]);
}void init()
for(int i=1;i<=m;i++)
}int main()
51NOD1459 迷宮遊戲
1459 迷宮遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的...
51Nod 1459 迷宮遊戲
你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的起點和終點房間,你首要目標是從起點盡快到達終點,在滿足首要目標的前提下,使得你的得分總和盡可能大...
51NOD 1459 迷宮遊戲
1459 迷宮遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的...