제출 #983064

#제출 시각아이디문제언어결과실행 시간메모리
983064vjudge1Cyberland (APIO23_cyberland)C++17
8 / 100
58 ms7116 KiB
#include "cyberland.h" #include <bits/stdc++.h> using namespace std; 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>>> g(N); for (int i = 0; i < M; ++i) { g[x[i]].emplace_back(y[i], c[i]); g[y[i]].emplace_back(x[i], c[i]); } vector<bool> used(N), ot(N); function<void(int, int)> dfs = [&](int v, int cnt) { assert(!used[v]); used[v] = true; for (auto [to, weight]: g[v]) { if (!used[to]) { if (arr[to] == 2 && cnt) { cnt--; ot[to] = true; } dfs(to, cnt); } } }; vector<double> d(N + 1, 1e18); d[0] = 0; set<pair<double, int>> q; q.emplace(d[0], 0); while (!q.empty()) { int nearest = q.begin()->second; q.erase(q.begin()); for (auto [to, weight]: g[nearest]) { double dis = d[nearest] + weight; if (arr[to] == 2) dis /= 2; if (!arr[to]) dis = 0; if (d[to] > dis) { q.erase(pair{d[to], to}); d[to] = dis; q.emplace(d[to], to); } } } 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...