1 条题解
-
0
C++ :
#include <cstdio> #include <cstring> #include <queue> #define INF 0x70000000 using namespace std; int n, m, p, q; int City[1001][1001], troop[101]; bool vis[1001]; queue<int> que; int bfs(){ int cur = q, time, i; memset(vis, 0, sizeof(vis)); vis[cur] = true; que.push(q); while(!que.empty()){ cur = que.front(); que.pop(); time = City[cur][0]; for(i = 1; i <= m; i++){ if(City[cur][i]){ if(!vis[i]){ City[i][0] = time + City[cur][i]; vis[i] = true; que.push(i); }else if(time + City[cur][i] < City[i][0]){ City[i][0] = time + City[cur][i]; } } } } int min = INF; for(i = 1; i <= n; i++){ int tmp = City[troop[i]][0]; min = tmp < min ? tmp : min; } return min; } int main(){ int i, a, b, t; while(~scanf("%d%d%d%d", &n, &m, &p, &q)){ memset(troop, 0, sizeof(troop)); memset(City, 0, sizeof(City)); for(i = 1; i <= n; i++) scanf("%d", &troop[i]); for(i = 1; i <= p; i++){ scanf("%d%d%d", &a, &b, &t); City[b][a] = City[a][b] = t; City[i][0] = 0; } printf("%d\n", bfs()); } return 0; }
- 1
信息
- ID
- 952
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者