Submission #371336

#TimeUsernameProblemLanguageResultExecution timeMemory
371336IwanttobreakfreeCrocodile's Underground City (IOI11_crocodile)C++98
0 / 100
1 ms364 KiB
#include "crocodile.h" #include <iostream> #include <vector> #include <queue> #include <set> using namespace std; int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]){ vector<int> distancia(N,1e9); int maximo=1e9; bool primero; vector<vector<pair<int,int>>> conexiones(N,vector<pair<int,int>>()); set <int> salidas; for(int i=0;i<M;i++){ conexiones[R[i][0]].push_back(make_pair(L[i],R[i][1])); conexiones[R[i][1]].push_back(make_pair(L[i],R[i][0])); } for(int i=0;i<K;i++)salidas.insert(P[i]); priority_queue <pair<int,int>> q; q.push(make_pair(0,0)); distancia[0]=0; priority_queue <pair<int,int>> caminos; int nodo; while(!q.empty()){ nodo=q.top().second; q.pop(); for(pair<int,int> con:conexiones[nodo]){ int arista=con.first; int siguiente=con.second; caminos.push(make_pair(-arista,siguiente)); } primero=true; while(!caminos.empty()){ if(primero)primero=false; else if(distancia[caminos.top().second]>distancia[nodo]-caminos.top().first){ distancia[caminos.top().second]=distancia[nodo]-caminos.top().first; q.push(make_pair(caminos.top().first,caminos.top().second)); } caminos.pop(); } } for(int i=0;i<K;i++){ maximo=min(maximo,distancia[P[i]]); } return maximo; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...