This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "cyberland.h"
#include <bits/stdc++.h>
using namespace std;
#define sp " "
#define pb push_back
#define pii pair<int, int>
#define st first
#define nd second
#define fileio() freopen("curling.in", "r", stdin), freopen("curling.out", "w", stdout)
const long double INF = 2e18 + 7;
double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) {
int lim = min(K, 75);
vector<vector<long double>> dist(lim + 5, vector<long double>(N, INF));
vector<pii> adj[N + 5];
for (int i = 0; i < M; i++){
adj[x[i]].pb({y[i], c[i]});
adj[y[i]].pb({x[i], c[i]});
}
vector<int> mark(N + 5, 0);
queue<int> q;
q.push(0);
mark[0] = 1;
while(!q.empty()){
int top = q.front();
q.pop();
for (auto i : adj[top]){
if (mark[i.st] == 0){
mark[i.st] = 1;
if (i.st != H) q.push(i.st);
}
}
}
dist[0][H] = 0;
long double mini = INF;
for (int i = 0; i <= lim; i++){
priority_queue<pair<long double, int>> q;
vector<int> vis(N, 0);
for (int j = 0; j < N; j++){
if (i == 0 || j != H) q.push({-dist[i][j], j});
}
while(!q.empty()){
int top = q.top().nd;
q.pop();
if (vis[top]) continue;
vis[top] = 1;
int curr = i;
if (arr[top] != 2 || i == lim){
for (auto j : adj[top]){
int v = j.st, w = j.nd;
long double upd = dist[i][top] + (long double)w / (1LL<<i);
if (dist[i][v] > upd){
dist[i][v] = upd;
if (v != H) q.push({-upd, v});
}
}
}
else if (arr[top] == 2) {
for (auto j : adj[top]){
int v = j.st, w = j.nd;
long double upd = dist[i][top] + (long double)w / (1LL<<(i + 1));
if (dist[i + 1][v] > upd){
dist[i + 1][v] = upd;
}
}
}
}
for (int j = 0; j < N; j++){
if (mark[j] && arr[j] == 0) mini = min(mini, dist[i][j]);
}
mini = min(mini, dist[i][0]);
}
if (mini >= 2e18) return -1;
return mini;
}
Compilation message (stderr)
cyberland.cpp: In function 'double solve(int, int, int, int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
cyberland.cpp:51:8: warning: unused variable 'curr' [-Wunused-variable]
51 | int curr = i;
| ^~~~
# | 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... |