제출 #1330032

#제출 시각아이디문제언어결과실행 시간메모리
1330032Nipphitch악어의 지하 도시 (IOI11_crocodile)C++20
0 / 100
1 ms348 KiB
#include "crocodile.h"
#include <bits/stdc++.h>
#define ll long long 
#define pii pair <ll,int> 
using namespace std;
const int INF=1e9+7;

int travel_plan(int N, int M, int R[][2], int L[], int K, int P[])
{
  vector <ll> d1(N+5,INF);
  vector <vector <pii>> adj(N+5);
  vector <bool> en(N+5,false);
  priority_queue <pii,vector <pii>,greater <pii>> pq;
  for(int i=0;i<M;i++){
    adj[R[i][0]].push_back({R[i][1],L[i]});
    adj[R[i][1]].push_back({R[i][0],L[i]});
  }
  for(int i=0;i<K;i++){
    en[P[i]]=true;
    pq.push({d1[P[i]]=0,P[i]});
  }
  //return -3;
  while(!pq.empty()){
    auto [d_u,u]=pq.top();
    pq.pop();
    if(d_u>d1[u]) continue;
    for(auto [v,w]:adj[u]) if(d1[v]>d_u+w) pq.push({d1[v]=d_u+w,v});
  }
  //return -2;
  vector <ll> d2(N+5,INF);
  pq.push({d2[0]=0,0});
  while(!pq.empty()){
    auto [d_u,u]=pq.top();
    pq.pop();
    if(en[u]) return d_u;
    if(d_u>d2[u]) continue;
    int idx=-1,mn=INF;
    for(auto [v,w]:adj[u]) if(d1[v]<mn) mn=d1[v],idx=v;
    for(auto [v,w]:adj[u]) if(v!=idx && d2[v]>d_u+w) pq.push({d2[v]=d_u+w,v});
  }
  return -1;
}


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