| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 499593 | aryan12 | 악어의 지하 도시 (IOI11_crocodile) | C++17 | 545 ms | 93440 KiB | 
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "crocodile.h"
#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 1e5 + 5;
set<long long> exits;
vector<pair<long long, long long> > g[MAXN];
long long values[MAXN][2];
bool vis[MAXN];
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) {
  for(long long i = 0; i < MAXN; i++) {
    values[i][0] = 1e15;
    values[i][1] = 1e15;
  }
  for(long long i = 0; i < K; i++) {
    exits.insert(P[i]);
  }
  for(long long 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]});
  }
  for(long long i = 0; i < N; i++) {
    if(exits.count(i)) {
      for(long long j = 0; j < g[i].size(); j++) {
        int hi = g[i][j].first;
        if(!exits.count(hi)) {
          if(values[hi][1] < g[i][j].second) {
            continue;
          }
          else if(values[hi][0] < g[i][j].second) {
            values[hi][1] = g[i][j].second;
          }
          else {
            values[hi][1] = values[hi][0];
            values[hi][0] = g[i][j].second;
          }
        }
      }
    }
  }
  priority_queue<pair<long long, long long>, vector<pair<long long, long long> >, greater<pair<long long, long long> > > pq;
  for(long long i = 0; i < N; i++) {
    if(values[i][1] != 1e15) {
      pq.push({values[i][1], i});
    }
  }
  while(!pq.empty()) {
    pair<long long, long long> cur = pq.top();
    pq.pop();
    long long cur_dist = cur.first, node = cur.second;
    if(vis[node]) {
      continue;
    }
    if(node == 0) {
      break;
    }
    vis[node] = true;
    for(long long i = 0; i < g[node].size(); i++) {
      if(exits.count(g[node][i].first) || vis[g[node][i].first]) {
        continue;
      }
      long long new_dist = g[node][i].second + cur_dist;
      long long next = g[node][i].first;
      //cout << "node = " << node << ", next = " << next << ", cur_dist = " << cur_dist << ", new_dist = " << new_dist << endl;
      if(values[next][1] < new_dist) {
        continue;
      }
      else if(values[next][0] < new_dist) {
        //assert(!vis[g[node][i].first]);
        values[next][1] = new_dist;
        pq.push({values[next][1], next});
      }
      else {
        //assert(!vis[g[node][i].first]);
        values[next][1] = values[next][0];
        values[next][0] = new_dist;
        pq.push({values[next][1], next});
      }
    }
  }
  while(!pq.empty()) {
    pq.pop();
  }
  /*for(int i = 0; i < N; i++) {
    cout << values[i][0] << " " << values[i][1] << endl;
  }*/
  assert(values[0][1] != 1e15);
  return values[0][1];
}
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
