Submission #1348675

#TimeUsernameProblemLanguageResultExecution timeMemory
1348675jadai007Cyberland (APIO23_cyberland)C++20
Compilation error
0 ms0 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) {
    const double inf = 1e18;
    K = min(K, 70);
    vector<vector<double>> dis(N + 1, vector<double>(K + 1, inf));
    vector<vector<pair<int, double>>> adj(N + 1);
    vector<int> vis(N);
    queue<int> q;
    priority_queue<tuple<double, int, int>, vector<tuple<double, int, int>>, greater<tuple<double, int, int>>> pq;
    for(int i = 0; i < M; ++i){
        adj[x[i]].emplace_back(y[i], (double)(c[i]));
        adj[y[i]].emplace_back(x[i], (double)(c[i]));
    }
    q.push(0);
    vis[0] = 1;
    while(!q.empty()){
        int u = q.front(); q.pop();
        if(u == H) continue;
        for(auto [v, w]:adj[u]) if(!vis[v]) vis[v] = 1, q.push(v);
    }
    memset(dis[0], 0, sizeof(dis[0]));
    pq.emplace(0.0, 0, 0);
    for(int i = 0; i < N; ++i) if(vis[i] && arr[i] == 0) memset(dis[i], 0, sizeof(dis[i])), pq.emplace(0.0, i, 0);
    while(!pq.empty()){
        auto [w, u, k] = pq.top();
        pq.pop();
        if(dis[u][k] < w || u == H) continue;
        if(k > 0 && dis[u][k] >= dis[u][k - 1]) continue;
        for(auto [v, ww]:adj[u]){
            if(dis[v][k] > dis[u][k] + ww){
                dis[v][k] = dis[u][k] + ww;
                pq.emplace(dis[v][k], v, k);
            }
            if(arr[v] == 2 && k < K){
                if(dis[v][k + 1] > (dis[u][k] + ww) / 2.0){
                    dis[v][k + 1] = (dis[u][k] + ww) / 2;
                    pq.emplace(dis[v][k + 1], v, k + 1);
                }
            }
        }
    }
    double ans = *min_element(dis[H].begin(), dis[H].begin() + 1 + K);
    if(ans == inf) return -1;
    else return ans;
}

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:25:11: error: cannot convert '__gnu_cxx::__alloc_traits<std::allocator<std::vector<double> >, std::vector<double> >::value_type' {aka 'std::vector<double>'} to 'void*'
   25 |     memset(dis[0], 0, sizeof(dis[0]));
      |     ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
      |           |
      |           __gnu_cxx::__alloc_traits<std::allocator<std::vector<double> >, std::vector<double> >::value_type {aka std::vector<double>}
In file included from /usr/include/features.h:502,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h:39,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h:679,
                 from /usr/include/c++/13/bits/requires_hosted.h:31,
                 from /usr/include/c++/13/vector:60,
                 from cyberland.h:1,
                 from cyberland.cpp:1:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:57:1: note:   initializing argument 1 of 'void* memset(void*, int, size_t)'
   57 | __NTH (memset (void *__dest, int __ch, size_t __len))
      | ^~~~~
cyberland.cpp:27:64: error: cannot convert '__gnu_cxx::__alloc_traits<std::allocator<std::vector<double> >, std::vector<double> >::value_type' {aka 'std::vector<double>'} to 'void*'
   27 |     for(int i = 0; i < N; ++i) if(vis[i] && arr[i] == 0) memset(dis[i], 0, sizeof(dis[i])), pq.emplace(0.0, i, 0);
      |                                                          ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                                |
      |                                                                __gnu_cxx::__alloc_traits<std::allocator<std::vector<double> >, std::vector<double> >::value_type {aka std::vector<double>}
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:57:1: note:   initializing argument 1 of 'void* memset(void*, int, size_t)'
   57 | __NTH (memset (void *__dest, int __ch, size_t __len))
      | ^~~~~