Submission #1183057

#TimeUsernameProblemLanguageResultExecution timeMemory
1183057Erick_7314Crocodile's Underground City (IOI11_crocodile)C++20
100 / 100
329 ms62104 KiB
#include "crocodile.h" #include <vector> #include <queue> #include <limits> using namespace std; typedef long long ll; typedef pair<ll, int> lli; typedef priority_queue<lli, vector<lli>, greater<lli>> PQ; const int MAXN = 100010; int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) { vector<vector<int>> adj(N); vector<vector<int>> len(N); vector<int> vis(N, 0); ll ans = -1; // Construcción del grafo for (int i = 0; i < M; i++) { int u = R[i][0], v = R[i][1]; adj[u].push_back(v); len[u].push_back(L[i]); adj[v].push_back(u); len[v].push_back(L[i]); } // Dijkstra desde cámaras de salida PQ pq; for (int i = 0; i < K; i++) { int x = P[i]; pq.push({0, x}); vis[x] = 1; // 1 = visitado por primera vez } while (!pq.empty()) { ll l = pq.top().first; int u = pq.top().second; pq.pop(); if (!vis[u]) { vis[u] = 1; continue; } if (vis[u] == 2) continue; if (u == 0) { ans = l; break; } vis[u] = 2; for (int i = 0; i < (int)adj[u].size(); i++) { int v = adj[u][i]; if (vis[v] == 2) continue; ll nl = l + len[u][i]; pq.push({nl, v}); } } return (int)ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...