/Vị trí tốt nhất

<Problem>

https://oj.vnoi.info/problem/bestspot
              #include <iostream>
        #include <queue>
        #include <vector>
        using namespace std;
        
        #define INF 1000000000
        
        int P, n, C;
        vector<pair<int, int>> Next[505];
        int dist[505][505];
        
        struct Node {
          int currentNode, dist;
          bool operator < (const Node& otherNode) const {
            return this->dist > otherNode.dist;
          }
        };
        
        void dijkstra(int s) {
          priority_queue<Node> iDex;
          for (int i = 1; i <= P; i++) dist[s][i] = INF;;
          dist[s][s] = 0;
          iDex.push({ s, 0 });
        
          while (!iDex.empty()) {
            int u = iDex.top().currentNode;
            int c = iDex.top().dist;
            iDex.pop();
        
            if (c > dist[s][u]) continue;
        
            for (int i = 0; i < Next[u].size(); i++) {
              int nextNode = Next[u].at(i).first;
              int w = Next[u].at(i).second;
        
              if (dist[s][nextNode] > dist[s][u] + w) {
                dist[s][nextNode] = dist[s][u] + w;
                iDex.push({ nextNode, dist[s][nextNode] });
              }
            }
        
          }
        }
        
        int main() {
          cin >> P >> n >> C;
        
          int* F = new int[n + 1];
        
          for (int i = 1; i <= n; i++) {
            cin >> F[i];
          }
        
        
        
          for (int i = 1; i <= C; i++) {
            int u, v, c;
            cin >> u >> v >> c;
            Next[u].push_back({ v, c });
            Next[v].push_back({ u, c });
          }
        
          //---
          for (int i = 1; i <= P; i++) dijkstra(i);
        
          int ans = INF;
          int cnt = 0;
          for (int i = 1; i <= P; i++) {
            int sum = 0;
            for (int j = 1; j <= n; j++) {
              if (dist[i][F[j]] == INF) {
                sum = 0;
                break;
              }
              sum = sum + dist[i][F[j]];
            }
            if (sum == 0) continue;
            if (ans > sum) {
              ans = sum;
              cnt = i;
            }
          }
        
          cout << cnt << endl;
        
          return 0;
        }