제출 #1158344

#제출 시각아이디문제언어결과실행 시간메모리
1158344countlessCyberland (APIO23_cyberland)C++20
44 / 100
26 ms7752 KiB
#include "cyberland.h" #include <vector> #include <queue> using namespace std; typedef long long ll; const ll INF = 1e18; // Dijkstra's algorithm from USACO guide double solve(int N, int M, int K, int H, std::vector<int> x, std::vector<int> y, std::vector<int> c, std::vector<int> arr) { vector<vector<pair<int, int>>> adj(N); for (int i = 0; i < M; i++) { adj[x[i]].push_back({y[i], c[i]}); adj[y[i]].push_back({x[i], c[i]}); } using T = pair<ll, int>; // vector<bool> visited(N, false); vector<ll> dist(N, __LONG_LONG_MAX__); dist[0] = 0; priority_queue<T, vector<T>, greater<T>> pq; pq.push({0, 0}); while (!pq.empty()) { const auto [cdist, node] = pq.top(); pq.pop(); if (node == H) continue; // if (cdist == 0 && arr[node] == 0) visited[node] = true; if (cdist != dist[node]) continue; for (const pair<int, int> &i : adj[node]) { if (arr[i.first] == 0 && 0 < dist[i.first]) { pq.push({dist[i.first] = 0, i.first}); } else if (cdist + i.second < dist[i.first]) { pq.push({dist[i.first] = cdist + i.second, i.first}); } } } if (dist[H] == __LONG_LONG_MAX__) return -1; return dist[H]; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...