l2-002鍊錶去重
利用第一次全部賦值dis
disdi
s為無窮大然後去更新路徑,使得能求出完整的路徑。
p at
h[j]
=i
path[j]=i
path[j
]=i,存的是i
−>
ji->j
i−>j。
遍歷路徑的時候需要用從尾−
>
->
−>
頭,從pat
h[d]
−>pa
th[s
]path[d]->path[s]
path[d
]−>pa
th[s
] 然後在計算路徑的多種可能時需要對如果到達某個為止是相同的距離時候相加可能性cnt
[j]+
=cnt
[k
]cnt[j]+=cnt[k]
cnt[j]
+=cn
t[k]
#include
using
namespace std;
int n,m,s,d;
int mt[
510]
[510
],val[
510]
;int dis[
510]
,vis[
510]
,cnt[
510]
,tot[
510]
,path[
510]
;int ans[
510]
;void
dij(
int src)
dis[src]=0
,vis[src]=0
; cnt[src]=1
,tot[src]
=val[src]
;int k;
for(
int i=
0;i++i)}if
(tmp==
1e9)
break
; vis[k]=1
;for
(int j=
0;j++j)
elseif(
!vis[j]
&&dis[j]
==dis[k]
+mt[k]
[j])
cnt[j]
+=cnt[k];}
}}}int
main()
}for
(int i=
1;i<=m;
++i)
dij(s)
;printf
("%d %d\n"
,cnt[d]
,tot[d]);
int cur=0;
for(
int i=d;i>=
0;i=path[i]
)for
(int i=cur;i>1;
--i)
printf
("%d\n"
,ans[1]
);}
L2 001 緊急救援 (25 分)
作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助 給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可能多的救援隊。輸入第一行...
L2 001 緊急救援 (25 分
l2 001 緊急救援 25 分 作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助 給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路...
L2 001 緊急救援 (25 分
最短路因為還要求最短路徑的個數和最大救援人數 對於每個節點和每個節點的前乙個節點,理想的方法是和藍橋杯第五題一樣,結構體裡增加三個記錄資訊,這道題就是要增加乙個最短路徑的個數和當前最大救援隊數的資訊和每個節點的前乙個節點。但我們存圖的方式不是存點,而是存邊,所以只能額外開乙個陣列tot,記錄起始點到...