Submission #968520

# Submission time Handle Problem Language Result Execution time Memory
968520 2024-04-23T14:18:55 Z saayan007 Cyberland (APIO23_cyberland) C++17
44 / 100
46 ms 28276 KB
#include "bits/stdc++.h"
#include "cyberland.h"
using namespace std;
 
#include <vector>
 
/* void bfs(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr, vector<pair<int, double>> adj[], double dist[]) { */

/* } */

double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) {
    K = min(K, 70);
    vector<pair<int, double>> adj[N];
    for(int i = 0; i < M; ++i) {
        adj[x[i]].emplace_back(y[i], c[i]);
        adj[y[i]].emplace_back(x[i], c[i]);
    }
 
    double dist[N][K];
    for(int i = 0; i < N; ++i) {
        for(int j = 0; j < K; ++j) {
            dist[i][j] = -1;
        }
    }
 
    if(1) { // BFS starts
        bool vis[N] = {};
        queue<int> qu;
        vis[0] = 1;
        qu.push(0);
        dist[0][0] = 0;

        while(!qu.empty()) {
            int a = qu.front();
            qu.pop();
            if(a == H) continue;
            for(auto [b, w] : adj[a]) {
                if(vis[b]) continue;
                vis[b] = 1;
                qu.push(b);
                if(arr[b] == 0) dist[b][0] = 0;
            }
        }
    } // BFS ends
 
    priority_queue<pair<double, pair<int, int>>> pq;
    for(int i = 0; i < N; ++i) {
        if(dist[i][0] == 0) {
            pq.push({-dist[i][0], {-(double)0, i}});
        }
    }
 
    while(!pq.empty()) {
        int a = pq.top().second.second;
        int st = pq.top().second.first;
        double d = -pq.top().first;
        pq.pop();
        if(dist[a][st] < d || a == H) {
            continue;
        }
 
        for(auto [b, w] : adj[a]) {
            if(dist[b][st] == -1 || d + w < dist[b][st]) {
                dist[b][st] = d + w;
                pq.push({-dist[b][st], {-st, b}});
            }
            if(arr[b] == 2 && st < K - 1) {
                ++st;
                if(dist[b][st] == -1 || (d + w) / 2 < dist[b][st]) {
                    dist[b][st] = (d + w) / 2;
                    pq.push({-dist[b][st], {-st, b}});
                }
            }
        }
    }
 
    double ans = -1;
    for(int i = 0; i < K; ++i) {
        if(ans == -1 || (dist[H][i] != -1 && ans > dist[H][i]))
            ans = dist[H][i];
    }
    return ans;
}
# Verdict Execution time Memory Grader output
1 Incorrect 17 ms 708 KB Wrong Answer.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 21 ms 1724 KB Correct.
2 Correct 25 ms 1672 KB Correct.
3 Correct 24 ms 1628 KB Correct.
4 Correct 25 ms 1880 KB Correct.
5 Correct 24 ms 1884 KB Correct.
6 Correct 24 ms 4616 KB Correct.
7 Correct 28 ms 4700 KB Correct.
8 Correct 14 ms 7516 KB Correct.
9 Correct 21 ms 1368 KB Correct.
10 Correct 21 ms 1280 KB Correct.
# Verdict Execution time Memory Grader output
1 Correct 31 ms 1668 KB Correct.
2 Correct 26 ms 1628 KB Correct.
3 Correct 24 ms 1640 KB Correct.
4 Correct 24 ms 1384 KB Correct.
5 Correct 23 ms 1384 KB Correct.
6 Correct 6 ms 3432 KB Correct.
# Verdict Execution time Memory Grader output
1 Incorrect 41 ms 21856 KB Wrong Answer.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 22 ms 1640 KB Correct.
2 Correct 24 ms 1876 KB Correct.
3 Correct 23 ms 1708 KB Correct.
4 Correct 22 ms 4696 KB Correct.
5 Correct 19 ms 1116 KB Correct.
# Verdict Execution time Memory Grader output
1 Correct 23 ms 1624 KB Correct.
2 Correct 20 ms 1624 KB Correct.
3 Correct 46 ms 28276 KB Correct.
4 Correct 15 ms 3672 KB Correct.
5 Correct 21 ms 1368 KB Correct.
6 Correct 22 ms 1624 KB Correct.
# Verdict Execution time Memory Grader output
1 Incorrect 27 ms 1628 KB Wrong Answer.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 28 ms 2044 KB Wrong Answer.
2 Halted 0 ms 0 KB -