Submission #1287219

#TimeUsernameProblemLanguageResultExecution timeMemory
1287219ecen30World Map (IOI25_worldmap)C++20
Compilation error
0 ms0 KiB
//testing AI code
#include "worldmap.h"
#include <vector>
#include <algorithm>
using namespace std;

vector<vector<int>> create_map(int N, int M, vector<int> A, vector<int> B) {
    // Step 1: Build adjacency graph (0-indexed)
    vector<vector<int>> G(N);
    for (int i = 0; i < M; i++) {
        A[i]--; B[i]--; // convert to 0-indexed
        G[A[i]].push_back(B[i]);
        G[B[i]].push_back(A[i]);
    }

    // Step 2: DFS to create a spanning tree and record tour
    vector<int> tour;
    vector<bool> visited(N, false);
    vector<int> depth(N, 0);
    vector<int> extraA, extraB;

    function<void(int)> dfs = [&](int u) {
        visited[u] = true;
        tour.push_back(u);
        for (int v : G[u]) {
            if (!visited[v]) {
                depth[v] = depth[u] + 1;
                dfs(v);
                tour.push_back(u);
            } else if (depth[u] < depth[v]) {
                extraA.push_back(u);
                extraB.push_back(v);
            }
        }
    };
    dfs(0);

    // Step 3: Assign ranks for tour positioning
    vector<int> rank(N, -1), holder(N, -1);
    int L = tour.size();
    for (int i = 0; i < L; i++) {
        int d = min(i, L - 1 - i);
        if (rank[tour[i]] < d) {
            rank[tour[i]] = d;
            holder[tour[i]] = i;
        }
    }

    // Step 4: Prepare adjacency lists for extra edges
    vector<vector<int>> extra(N);
    for (int i = 0; i < (int)extraA.size(); i++) {
        if (rank[extraA[i]] < rank[extraB[i]]) swap(extraA[i], extraB[i]);
        extra[extraA[i]].push_back(extraB[i]);
    }

    // Step 5: Construct grid
    int K = 2 * N;
    vector<vector<int>> grid(K, vector<int>(K, 0));
    int cur = 0;
    for (int i = 0; i < L; i++) {
        int u = tour[i];
        if (i == holder[u]) {
            int pos = 0;
            for (int j = 0; j < K; j++) {
                int a = cur - j;
                if (0 <= a && a < K) grid[j][a] = u;
                int b = cur + 1 - j;
                if (0 <= b && b < K) {
                    if (pos < (int)extra[u].size()) {
                        grid[j][b] = extra[u][pos++];
                    } else {
                        grid[j][b] = u;
                    }
                }
                int c = cur + 2 - j;
                if (0 <= c && c < K) grid[j][c] = u;
            }
            cur += 3;
        } else {
            for (int j = 0; j < K; j++) {
                int a = cur - j;
                if (0 <= a && a < K) grid[j][a] = u;
            }
            cur += 1;
        }
    }

    // Step 6: Convert back to 1-indexed colors
    for (int i = 0; i < K; i++)
        for (int j = 0; j < K; j++)
            grid[i][j]++;

    return grid;
}

Compilation message (stderr)

worldmap.cpp: In function 'std::vector<std::vector<int> > create_map(int, int, std::vector<int>, std::vector<int>)':
worldmap.cpp:22:5: error: 'function' was not declared in this scope
   22 |     function<void(int)> dfs = [&](int u) {
      |     ^~~~~~~~
worldmap.cpp:5:1: note: 'std::function' is defined in header '<functional>'; did you forget to '#include <functional>'?
    4 | #include <algorithm>
  +++ |+#include <functional>
    5 | using namespace std;
worldmap.cpp:22:14: error: expected primary-expression before 'void'
   22 |     function<void(int)> dfs = [&](int u) {
      |              ^~~~
worldmap.cpp:36:5: error: 'dfs' was not declared in this scope
   36 |     dfs(0);
      |     ^~~