Submission #1137339

#TimeUTC-0UsernameProblemLanguageResultExecution timeMemory
11373392025-01-19 16:42:20IwanttobreakfreeCrocodile's Underground City (IOI11_crocodile)C++17
0 / 100
0 ms320 KiB
#include "crocodile.h"
#include <bits/stdc++.h>
using namespace std;
// Multi-Dijkstra
vector<vector<long long>> Dijkstra(int K, int P[], vector<vector<pair<int,int>>>& lista) {
int n = lista.size();
priority_queue<pair<pair<long long,int>, bool>> pq; // log N
vector<vector<long long>> dist(n, vector<long long> (2, 1e18)); // nos guardamos las rutas alternativas
// dist[v][0] nos guardamos la segunda distancia mas corta a una de las salidas
// dist[v][1] nos guardamos la primera distancia mas corta a una de las salidas
for (int i = 0; i < K; ++i) {
dist[P[i]][1] = 0;
dist[P[i]][0] = 0;
pq.push({{dist[P[i]][0], P[i]}, 0});
}
while (!pq.empty()) {
int nodoActual = pq.top().first.second;
long long distActual = -pq.top().first.first;
bool masCorta = pq.top().second;
pq.pop();
if (dist[nodoActual][masCorta] < distActual) continue;
for (auto vecino: lista[nodoActual]) {
int nextNodo = vecino.first, w = vecino.second;
// Actualizar distancia mas corta
if (dist[nextNodo][true] > dist[nodoActual][false] + w) { // Hemos encontrado una ruta alternativa que mejora la anterior
if (dist[nextNodo][false] > dist[nextNodo][true]) {
dist[nextNodo][false] = dist[nodoActual][true];
pq.push({{-dist[nextNodo][0], nextNodo}, false});
}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...