Submission #1179878

#TimeUsernameProblemLanguageResultExecution timeMemory
1179878adriines06Crocodile's Underground City (IOI11_crocodile)C++20
0 / 100
0 ms324 KiB
#include "crocodile.h"
#include<bits/stdc++.h>
using namespace std;

int travel_plan(int N, int M, int R[][2], int L[], int K, int P[])
{
  int n=N,m=M,k=K;
  vector<pair<int,int>>adj;
  vector<vector<int>>g(n,vector<int>(n,0));
  vector<int>s(k);

  priority_queue<pair<int,int>>pq;
  vector<pair<int,int>>dis(n,pair<int,int>{1e9+5,1e9+5});
  vector<bool>vis(n,false);

  for(int i=0;i<m;i++){
    int a=R[i][0],b=R[i][1]; 
    adj.push_back({a,b});
  }
  for(int i=0;i<m;i++){
    int w=L[i]; 
    g[adj[i].first][adj[i].second]=w;
    g[adj[i].second][adj[i].first]=w;
  }
  for(int i=0;i<k;i++){
    int x=P[i];
    dis[x].first=dis[x].second=0;
    pq.push({0,x});
  }
  while(!pq.empty()){
      int u=pq.top().second;
      pq.pop();
      if(vis[u]) continue;
      else vis[u]=1;
      for(int v=0;v<n;v++){ 
          int w=g[u][v];
          if(w==0) continue;
          if(dis[u].second+w<dis[v].first){ 
              dis[v].second=dis[v].first;
              dis[v].first=dis[u].second+w;

              pq.push({-dis[v].first,v});
          }
          else if(dis[v].first!=0 && dis[u].second+w<dis[v].second){
              dis[v].second=dis[u].second+w;

              pq.push({-dis[v].second,v});
          }
          
      }

  }
  return dis[0].second;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...