제출 #1225905

#제출 시각아이디문제언어결과실행 시간메모리
1225905sokratisiSwapping Cities (APIO20_swap)C++20
0 / 100
2095 ms2624 KiB
#include "swap.h" #include <queue> #include <vector> using namespace std; // zero indexing int n, m, dist[100005], p[100005], dumbdist[100005]; bool vis[100005]; vector<pair<int, int>> adj[100005]; void dijkstra(int s) { for (int i = 0; i < n; i++) dist[i] = 1e9+5; for (int i = 0; i < n; i++) vis[i] = false; priority_queue<pair<int, int>> q; dist[s] = 0; q.push({0, s}); p[s] = -1; while(!q.empty()) { int node = q.top().second; if (vis[node]) continue; vis[node] = true; for (auto u: adj[node]) { if (!vis[u.first]) { if (max(dist[node],u.second) < dist[u.first]) { dist[u.first] = max(dist[node],u.second); p[u.first] = node; q.push({-dist[u.first], u.first}); } } } } } void help_dumbdijkstra(int s, int nxt) { // put final vertex here if (p[s] != -1) help_dumbdijkstra(p[s], s); for (auto u: adj[s]) { if (u.first != p[s] && u.first != nxt) { dumbdist[s] = min(max(dist[s], u.second), max(dist[u.first], u.second)); } } } void dumbdijkstra(int s) { // put final vertex here for (int i = 0; i < n; i++) dumbdist[i] = 1e9+5; help_dumbdijkstra(s, -1); } void init(int N, int M, vector<int> u, vector<int> v, vector<int> w) { n = N; m = M; for (int i = 0; i < m; i++) { adj[u[i]].push_back({v[i], w[i]}); adj[v[i]].push_back({u[i], w[i]}); } } int getMinimumFuelCapacity(int x, int y) { dijkstra(x); dumbdijkstra(y); if (dumbdist[y] > 1e9) return -1; return dumbdist[y]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...