#include "cyberland.h"
#include <bits/stdc++.h>
#include <queue>
using namespace std;
using ll = long long;
const ll INF = 1e18;
vector<vector<array<int, 2>>> adj;
vector<double> dijkstra(vector<pair<int, double>> starts, int N) {
vector<double> dist(N, INF);
vector<char> vis(N);
priority_queue<pair<double, int>> pq;
for (auto [v, d]: starts) {
dist[v] = d;
pq.push({-d, v});
}
while (!pq.empty()) {
auto [_, v] = pq.top(); pq.pop();
if (vis[v]) continue;
vis[v] = true;
for (auto [u, w]: adj[v]) {
if (dist[v]+w<dist[u]) {
dist[u] = dist[v]+1.0*w;
pq.push({-dist[u], u});
}
}
}
return dist;
}
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) {
adj.assign(N, {});
for (int i=0; i<M; i++) {
int u = x[i], v=y[i], w=c[i];
adj[u].push_back({v, w});
adj[v].push_back({u, w});
}
double ans = INF;
vector<char> vis(N);
vis[0] = true;
queue<int> q;
q.push(0);
while (!q.empty()) {
int v= q.front(); q.pop();
for (auto [u, _]: adj[v]) {
if (!vis[u] && u!=H) {
vis[u] = true;
q.push(u);
}
}
};
vector<pair<int, double>> starts = {{0, 0}};
for (int i=1; i<N; i++) if (vis[i] && arr[i]==0) starts.push_back({i, 0});
K = min(K, 60);
while (K>=0) {
vector<double> dist_next(N, INF), dist = dijkstra(starts, N);
if (2*dist[H]>=INF) break;
ans = min(ans, dist[H]);
for (int v=0; v<N; v++) {
if (arr[v]!=2 || 2*dist[v]>=INF) continue;
for (auto [u, w]: adj[v]) dist_next[u] = min(dist_next[u], dist[v]/2.0+1.0*w);
}
starts.clear();
for (int v=0; v<N; v++) if (dist_next[v]<=INF/2.0) starts.push_back({v, dist_next[v]});
K--;
}
if (2*ans>=INF) return -1;
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |