Submission #1327048

#TimeUsernameProblemLanguageResultExecution timeMemory
1327048riafhasan2010Crocodile's Underground City (IOI11_crocodile)C++17
0 / 100
0 ms332 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const ll inf = 1e17;

ll travel_plan(int n, int m, int R[][2], int L[], int k, int p[]) {
  vector<vector<pair<int, int>>> g(n);
  for (int i = 0; i < m; i++) {
    g[R[i][0]].push_back({R[i][1], L[i]});
    g[R[i][1]].push_back({R[i][0], L[i]});
  }
  vector<ll> best(n, inf), second_best(n, inf);
  vector<int> vis(n, 0);
  priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq;
  for (int i = 0; i < k; i++) {
    best[p[i]] = 0;
    pq.push({0, p[i]});
  }
  while (!pq.empty()) {
    auto [c, u] = pq.top(); pq.pop();
    if (!u) continue;
    for (auto [v, w] : g[u]) {
      if (c + w < best[v]) {
        second_best[v] = best[v];
        best[v] = c + w;
        if (vis[u] == g[u].size() - 1) {
          pq.push({best[v], v});
          vis[v]++;
        }
      }
      else if (c + w < second_best[v]) {
        second_best[v] = c + w;
        if (vis[u] == g[u].size() - 1) {
          pq.push({second_best[v], v});
          vis[v]++;
        }
      }
    }
  }
  return second_best[0];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...