제출 #36351

#제출 시각아이디문제언어결과실행 시간메모리
36351funcsr악어의 지하 도시 (IOI11_crocodile)C++14
100 / 100
1529 ms174380 KiB
#include <iostream>
#include <vector>
#include <queue>
#include "crocodile.h"
using namespace std;
#define INF 1145141919
#define rep(i, n) for (int i=0; i<(n); i++)
#define pb push_back
#define all(x) x.begin(), x.end()
#define _1 first
#define _2 second
typedef pair<int, int> P;

int N, M;
vector<P> G[100000];
priority_queue<P, vector<P>, greater<P> > Q;
int dp[100000];
bool flag[100000], used[100000];
void set(int x, int val) {
  used[x] = true;
  dp[x] = val;
  for (P p : G[x]) {
    int t = p._1, l = p._2;
    Q.push(P(val+l, t));
  }
}

int travel_plan(int n, int m, int R[][2], int L[], int K, int p[]) {
  N = n, M = m;
  rep(i, M) {
    G[R[i][0]].pb(P(R[i][1], L[i]));
    G[R[i][1]].pb(P(R[i][0], L[i]));
  }
  rep(i, N) dp[i] = INF, flag[i] = used[i] = false;
  rep(i, K) {
    int x = p[i];
    set(x, 0);
  }
  while (!Q.empty()) {
    int val = Q.top()._1, x = Q.top()._2;
    Q.pop();
    if (used[x]) continue;
    if (flag[x]) set(x, val);
    else flag[x] = true;
  }
  return dp[0];
}


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