PTA L2 001 緊急救援 (25 分

2022-06-19 03:51:09 字數 2950 閱讀 5468

作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助**給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可能多的救援隊。

input

輸入第一行給出4個正整數n、m、s、d,其中n(2)是城市的個數,順便假設城市的編號為0 ~ (;m是快速道路的條數;s是出發地的城市編號;d是目的地的城市編號。

第二行給出n個正整數,其中第i個數是第i個城市的救援隊的數目,數字間以空格分隔。隨後的m行中,每行給出一條快速道路的資訊,分別是:城市1、城市2、快速道路的長度,中間用空格分開,數字均為整數且不超過500。輸入保證救援可行且最優解唯一。

output

第一行輸出最短路徑的條數和能夠召集的最多的救援隊數量。第二行輸出從s到d的路徑中經過的城市編號。數字間以空格分隔,輸出結尾不能有多餘空格。

input

4 5 0 3

20 30 40 10

0 1 1

1 3 2

0 3 3

0 2 2

2 3 2

2 60

0 1 3

跟最短路計數一樣。用的是dijkstra。

乙個計數,如果新路徑,就相等。相同的最短路就相加。

乙個最多數目。如果新路經就相加。相同的就更新最大值。並且更新字首點。

求路徑就是記錄乙個字首點。

1 #include2 #include3 #include

4 #include5 #include6 #include

7 #include8 #include9 #include10

//#include

11using

namespace

std;

12 typedef long

long

ll;13

const

int inf=0x7fffffff;14

const

int n=1001;15

const

int m=9999999;16

const ll mod=1000000000+7;17

int n,m,s,d,len=0;18

intlink[n],dis[n],con[n],num[n],val[n],pre[n],bok[n];

19int ans[n],cnt=0;20

struct

node

21e[m];

24void insert(int xx,int yy,int

vv)25

31void

init()

3240

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

4147 dis[s]=0

;48 bok[s]=1

;49 con[s]=1;50

for(int i=link[s];i;i=e[i].next)

51

54for(int i=1;i)

5563 bok[u]=1;64

//cout<65

for(int j=link[u];j;j=e[j].next)

6674

else

if(dis[e[j].y]==dis[u]+e[j].v)

7582}83

}84//cout<8586}

8788}89

intmain()

90

view code

等會有spfa寫一下qaq

錯了乙個資料的spfa()

1 #include2 #include3 #include

4 #include5 #include6 #include

7 #include8 #include9 #include10

//#include

11using

namespace

std;

12 typedef long

long

ll;13

const

int inf=0x7fffffff;14

const

int n=1001;15

const

int m=9999999;16

const ll mod=1000000000+7;17

int n,m,s,d,len=0;18

intlink[n],dis[n],con[n],num[n],val[n],pre[n],bok[n];

19int que[m+100

];20

int ans[n],cnt=0;21

struct

node

22e[m];

25void insert(int xx,int yy,int

vv)26

32void

init()

3341

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

4248 dis[s]=0

;49 bok[s]=1

;50 con[s]=1;51

for(int i=link[s];i;i=e[i].next)

5256

int head=1,tail=2

;57 que[1]=s;

58while(head

5976}77

else

if(dis[e[i].y]==dis[tt]+e[i].v)

7885}86

}87 head++;88}

89}90int

main()

91

view code

L2 001 緊急救援 (25 分)

作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助 給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可能多的救援隊。輸入第一行...

L2 001 緊急救援 (25 分

l2 001 緊急救援 25 分 作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助 給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路...

L2 001 緊急救援 (25 分

最短路因為還要求最短路徑的個數和最大救援人數 對於每個節點和每個節點的前乙個節點,理想的方法是和藍橋杯第五題一樣,結構體裡增加三個記錄資訊,這道題就是要增加乙個最短路徑的個數和當前最大救援隊數的資訊和每個節點的前乙個節點。但我們存圖的方式不是存點,而是存邊,所以只能額外開乙個陣列tot,記錄起始點到...