Submission #788805

#TimeUsernameProblemLanguageResultExecution timeMemory
788805Ronin13악어의 지하 도시 (IOI11_crocodile)C++17
0 / 100
1 ms212 KiB
#include "crocodile.h"
#include <bits/stdc++.h>
#define ll long long 
#define ull unsigned ll
#define f first
#define s second
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pb push_back
#define epb emplace_back
using namespace std;
int travel_plan(int n, int m, int R[][2], int L[], int k, int p[])
{
  vector <vector <pii> > g(n);
  priority_queue <pii> pq;
  for(int i = 0; i < m; i++){
    int u = R[i][0];
    int v = R[i][1];
    int l = L[i];
    g[v].pb({u, l});
    g[u].pb({v, l});
  }
  int d[n + 1][2];
  for(int i = 0; i < n; i++)
    d[i][0] = d[i][1] = 1e9 + 1;
  for(int i = 0; i < k; i++){
    pq.push({0, p[i]});
    d[p[i]][0] = d[p[i]][1] = 0;
  }
  vector <bool> used(n + 1, false);
  while(!pq.empty()){
      int v = pq.top().s; pq.pop();
      if(used[v]) continue;
      used[v] = true;
      for(auto x : g[v]){
        int to = x.f;
        int len = x.s;
        if(d[v][1] + len < d[to][1] + len){
            d[to][1] = d[v][1] + len;
            if(d[to][0] > d[to][1]) swap(d[to][1], d[to][0]);
            if(d[to][1] != 1e9 + 1)pq.push({-d[to][1], to});
        }
      }
  }
  
  return d[0][1];
}


#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...