题目链接
代码
#include<bits/stdc++.h>
using namespace std;
int N, M, C1, C2, temp, src, dest, len;
int team[500], graph[500][500], dis[500], visited[500], num[500],cost[500];
void dijkstra(int src, int dest) {
num[src] = 1;
cost[src] = team[src];
memset(dis, 0x3f, sizeof dis);
dis[src] = 0;
for (int i = 0; i < N; i++) {
int min = 0x3f3f3f3f,minid = -1;
for (int j = 0; j < N; j++) {
if (dis[j] < min&&!visited[j]) {
min = dis[j];
minid = j;
}
}
if (minid == -1)break;
visited[minid] = 1;
for (int k = 0; k < N; k++) {
if (!visited[k]) {
if (dis[k] > dis[minid] + graph[minid][k]) {
num[k] = num[minid];
cost[k] = cost[minid] + team[k];
dis[k] = dis[minid] + graph[minid][k];
}
else if(dis[k] == dis[minid] + graph[minid][k]){
num[k] += num[minid];
cost[k] = cost[k] > cost[minid] + team[k] ? cost[k] : cost[minid] + team[k];
}
}
}
}
cout << num[dest] << " " << cost[dest];
}
int main() {
cin >> N >> M >> C1 >> C2;
for (int i = 0; i < N; i++) {
cin >> team[i];
}
memset(graph, 0x3f, sizeof graph);
for (int i = 0; i < M; i++) {
cin >> src >> dest >> len;
graph[src][dest] = graph[dest][src] = len;
}
dijkstra(C1,C2);
return 0;
}
写了挺久这题,注释也懒得敲了(╯‵□′)╯︵┻━┻