제출 #1228129

#제출 시각아이디문제언어결과실행 시간메모리
1228129jfioashfn333사이버랜드 (APIO23_cyberland)C++20
44 / 100
27 ms9796 KiB
#include "cyberland.h" #include <vector> #include <set> #include <utility> #include <limits> #define pb push_back #define eb emplace_back #define pii std::pair<int64_t, int64_t> const int64_t INF = 1e18; bool u[100005]; std::vector<pii> g[100005]; int t; void f(int x) { u[x] = 1; if (x == t) return; for (auto p : g[x]) { if (!u[p.first]) f(p.first); } } 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> a) { t = H; for (int i = 0; i < N; i++) g[i].clear(), u[i] = 0; for (int i = 0; i < M; i++) { g[x[i]].eb(y[i], c[i]); g[y[i]].eb(x[i], c[i]); } a[0] = 0; f(0); std::set<pii> q; std::vector<int64_t> d(N, INF); d[0] = 0; q.insert({0, 0}); for (int i = 1; i < N; i++) { if (a[i] == 0 && u[i]) { d[i] = 0; q.insert({0, i}); } } while (!q.empty()) { int x = q.begin()->second; q.erase(q.begin()); for (auto p : g[x]) { int y = p.first; int64_t w = p.second; if (d[y] > d[x] + w) { q.erase({d[y], y}); d[y] = d[x] + w; q.insert({d[y], y}); } } } if (d[H] == INF) return -1; return d[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...