原题
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
typedef pair<int, int> PII;
vector<PII> graph[100];
vector<vector<int>> Dist(100, vector<int>(100, -1));
vector<bool> State(100, false);
void Dijkstra(int s, int n) {
for (int i = 0; i < n; ++i) {
State[i] = false;
}
Dist[s][s] = 0;
priority_queue<PII, vector<PII>, greater<PII>> pq;
pq.emplace(0, s);
while (!pq.empty()) {
pair<int, int> cur = pq.top();
pq.pop();
if (State[cur.second]) continue;
else State[cur.second] = true;
for (auto neighbor: graph[cur.second]) {
if (Dist[s][neighbor.first] == -1 || Dist[s][neighbor.first] > Dist[s][cur.second] + neighbor.second) {
Dist[s][neighbor.first] = Dist[s][cur.second] + neighbor.second;
pq.emplace(Dist[s][neighbor.first], neighbor.first);
}
}
}
}
int main() {
int n, m, k;
cin >> n >> m >> k;
for (int i = 0; i < m; ++i) {
int u, v, w;
cin >> u >> v >> w;
graph[u].emplace_back(v, w);
graph[v].emplace_back(u, w);
}
int cityNum;
vector<int> cityList;
while (cin >> cityNum) {
cityList.push_back(cityNum);
}
for (int city: cityList) {
Dijkstra(city, n);
}
int sum = -1, resultCity;
for (int i = 0; i < cityList.size(); ++i) {
int tmp = 0;
for (int j = 0; j < n; ++j) {
tmp += Dist[cityList[i]][j];
}
if (sum == -1 || tmp < sum) {
sum = tmp;
resultCity = cityList[i];
}
}
cout << resultCity << " " << sum << endl;
return 0;
}