Submission #983307

# Submission time Handle Problem Language Result Execution time Memory
983307 2024-05-15T10:06:58 Z vjudge1 Cyberland (APIO23_cyberland) C++17
20 / 100
26 ms 7104 KB
#include <vector>
#include <queue>
#include <limits>

using namespace std;

double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) {
    // Initialize the graph
    vector<vector<pair<int, int>>> graph(N);
    for (int i = 0; i < M; ++i) {
        graph[x[i]].push_back({y[i], c[i]});
        graph[y[i]].push_back({x[i], c[i]});
    }
    
    // Initialize distances
    vector<double> dist(N, numeric_limits<double>::max());
    dist[0] = 0;  // Distance from your country to itself is 0
    
    // Priority queue to store {distance, country} pairs
    priority_queue<pair<double, int>, vector<pair<double, int>>, greater<pair<double, int>>> pq;
    pq.push({0, 0});  // Start from your country
    
    while (!pq.empty()) {
        int u = pq.top().second;
        double d = pq.top().first;
        pq.pop();
        
        // Check if we have reached Cyberland
        if (u == H) return d;
        
        // Check if we have used up all divide-by-2 abilities
        int remaining_divide_by_2 = K;
        if (arr[u] == 2) remaining_divide_by_2--;
        
        for (auto& edge : graph[u]) {
            int v = edge.first;
            int cost = edge.second;
            double new_dist = d + cost;
            
            // Apply special ability of the country
            if (arr[v] == 0) new_dist = d;  // Passing time becomes 0
            else if (arr[v] == 2 && remaining_divide_by_2 > 0) {  // Divide-by-2 ability
                new_dist = d + cost / 2.0;
                remaining_divide_by_2--;
            }
            
            // Update the distance if the new path is shorter
            if (new_dist < dist[v]) {
                dist[v] = new_dist;
                pq.push({new_dist, v});
            }
        }
    }
    
    // If Cyberland is unreachable
    return -1;
}
# Verdict Execution time Memory Grader output
1 Correct 14 ms 860 KB Correct.
2 Correct 14 ms 860 KB Correct.
# Verdict Execution time Memory Grader output
1 Correct 18 ms 1368 KB Correct.
2 Correct 21 ms 1564 KB Correct.
3 Correct 20 ms 1460 KB Correct.
4 Correct 20 ms 2136 KB Correct.
5 Correct 20 ms 1620 KB Correct.
6 Correct 16 ms 2208 KB Correct.
7 Correct 22 ms 2348 KB Correct.
8 Correct 10 ms 2904 KB Correct.
9 Correct 20 ms 1372 KB Correct.
10 Correct 20 ms 1372 KB Correct.
# Verdict Execution time Memory Grader output
1 Incorrect 21 ms 1372 KB Wrong Answer.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 22 ms 7104 KB Wrong Answer.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 18 ms 1372 KB Correct.
2 Correct 20 ms 1596 KB Correct.
3 Correct 26 ms 1620 KB Correct.
4 Correct 18 ms 2152 KB Correct.
5 Correct 18 ms 1244 KB Correct.
# Verdict Execution time Memory Grader output
1 Incorrect 20 ms 1372 KB Wrong Answer.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 21 ms 1556 KB Wrong Answer.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 21 ms 1372 KB Wrong Answer.
2 Halted 0 ms 0 KB -