時間限制
200 ms
記憶體限制
65536 kb
**長度限制
8000 b
判題程式
standard
作者
陳越
作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助**給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可能多的救援隊。
輸入格式:
輸入第一行給出4個正整數n、m、s、d,其中n(2<=n<=500)是城市的個數,順便假設城市的編號為0~(n-1);m是快速道路的條數;s是出發地的城市編號;d是目的地的城市編號。第二行給出n個正整數,其中第i個數是第i個城市的救援隊的數目,數字間以空格分隔。隨後的m行中,每行給出一條快速道路的資訊,分別是:城市1、城市2、快速道路的長度,中間用空格分開,數字均為整數且不超過500。輸入保證救援可行且最優解唯一。
輸出格式:
第一行輸出不同的最短路徑的條數和能夠召集的最多的救援隊數量。第二行輸出從s到d的路徑中經過的城市編號。數字間以空格分隔,輸出首尾不能有多餘空格。
輸入樣例:
4 5 0 3輸出樣例:20 30 40 10
0 1 1
1 3 2
0 3 3
0 2 2
2 3 2
2 600 1 3
#include #include#include
#include
using
namespace
std;
int inf = 99999999
;int e[505][505
];int d[505
];int a[505
];int v[505
];int r[505
];int su[505
];int ans[505
];int path[505
];int sum=0
;int
m;int n = 0
;void dijkstra(int
s)
} d[s]=0
; v[s]=1
;
while(1
)
}if(k==-1) break
; v[k] = 1;//
標記已被挑過
for (j = 1; j <= n; j++)
else
if(!v[j]&&d[j]==d[k]+e[k][j])}}
}}int
main()
}for(int i=1;i<=n;i++) cin>>r[i];
for (i = 1; i <= m; i++)
}if(n == 1) //
特判,其實不考慮也能過
dijkstra(s);
int p[500],temp=d;
int k=0
;
while(temp!=s) //
輸出路徑
p[k]=s;
cout
<"
"for(i=k;i>=1;i--)
cout
<1
}
天梯賽L2 001 緊急救援 25 分
題目中已經明確要求最短路,因此最短路演算法也就不可或缺 int map 500 500 int u,v,w for int i 0 i m i struct nodearr 500 int u,v,w for int i 0 i m i struct edgearr 500 用於記載每一條邊 int...
L2 001 緊急救援 (25 分)
作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助 給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可能多的救援隊。輸入第一行...
L2 001 緊急救援 (25 分
l2 001 緊急救援 25 分 作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助 給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路...