從我們的城市到達羅馬有許多不同的旅遊路線。
請你在成本最低的旅遊路線之中,找到使得遊客幸福感最強的路線。
輸入格式
第一行包含兩個整數 nn 和 kk,分別表示總城市數量,城市之間道路數量,還包含乙個城市名字,表示初始城市。
接下來 n−1n−1 行,每行包含乙個城市名和乙個整數,表示到達該城市(初始城市除外)可以獲得的幸福感。
接下來 kk 行,每行包含乙個道路的資訊,格式為 city1 city2 cost,表示兩個城市之間的道路行走的花費,道路是雙向的。
城市都是由三個大寫字母構成的字串。
我們的目的地始終都是羅馬 rom。
輸出格式
我們應該找到成本最低的路線。
如果這樣的路線不是唯一的,那麼選取使人們獲得最大幸福感的路線。
如果這樣的路線仍然不是唯一的,那麼我們選擇平均幸福感最大的路線,資料保證這種路線唯一。
平均幸福感 = 總幸福感 / 經過的城市數量(初始城市不算)
第一行輸出四個整數,最小成本的路線數量,最小成本,幸福感,平均幸福感(只取整數部分)。
第二行,按照 city1->city2->…->rom 的格式輸出路線。
資料範圍
2≤n≤2002≤n≤200,
1≤k≤2501≤k≤250,
每個城市的幸福感範圍在 [0,100][0,100],
每條路線最大成本不超過 10001000
輸入樣例:
67 hzh
rom 100
pkn 40
gdn 55
prs 95
bln 80
rom gdn 1
bln rom 1
hzh pkn 1
prs rom 2
bln hzh 2
pkn gdn 1
hzh prs 1
輸出樣例:33
19597
hzh-
>prs-
>rom
#include
using
namespace std;
const
int n=
250;
int g[n]
[n],w[n]
;int n,m;
int dist[n]
,weight[n]
,cnt[n]
,sum[n]
,pre[n]
;//sum記錄點數 平均幸福感最大點數最小路線
bool st[n]
;unordered_mapint>mp1;
unordered_map<
int, string>mp2;
void
dijiskstra()
if(t==-1
)break
; st[t]
=true
;for
(int v=
1;v<=n;v++
)else
if(dist[t]
+g[t]
[v]==dist[v]
)else
if(weight[t]
+w[v]
==weight[v])}
}}}}
intmain()
memset
(g,0x3f
,sizeof g)
;//記得初始化
for(
int i=
0;i)dijiskstra()
;int t=mp1[
"rom"];
cout<<<
' '<<<
' '<<<
' '
int> v;
for(
int i=t;i!=
1;i=pre[i]
)for
(int i=v.
size()
-1;i>=
0;i--
)return0;
}
PAT甲級真題1153
pat 准考證號由 44 部分組成 第 11 位是級別,即 t 代表頂級 a 代表甲級 b 代表乙級 第 2 42 4 位是考場編號,範圍從 101101 到 999999 第 5 105 10 位是考試日期,格式為年 月 日順次各佔 22 位 最後 11 1311 13 位是考生編號,範圍從 00...
PAT甲級真題 1014 Wait In Line
一 題目 二 思路 題意 模擬排隊,但和實際排隊的區別在於 思路 模擬排隊,記錄消費者辦理結束所需的總時間 以分鐘為單位,最後轉換為時刻,由等待時間 辦理時間組成 若等待時間wt 540,則給予sorry 否則,根據總時間sum算出相應時刻 注意 當兩個視窗同樣長且均未滿時,要同時入隊消費者,使之隊...
PAT甲級真題1140 外觀數列
外觀數列是指具有以下特點的整數序列 d,d1,d111,d113,d11231,d112213111,其中 d 是乙個 0,9 0,9 範圍內的不等於 11 的整數。序列的第 n 1n 1 項是對第 nn 項的描述。比如第 22 項表示第 11 項有 11 個 d,所以就是 d1 第 22 項是 1...