#include "worldmap.h"
#include <algorithm>
#include <iostream>
#include <functional>
#include <utility>
#include <cmath>
#include <cassert>
std::vector<std::vector<int>> create_map(int N, int M, std::vector<int> A, std::vector<int> B) {
std::vector<std::vector<int>> adj_matrix(N+1, std::vector<int>(N+1, 0));
std::vector<std::vector<int>> hist_matrix(N+1, std::vector<int>(N+1, 0));
for (int i=0; i<M; i++)
adj_matrix[A[i]][B[i]] =
adj_matrix[B[i]][A[i]] =
hist_matrix[A[i]][B[i]] =
hist_matrix[B[i]][A[i]] = 1;
std::vector<std::vector<int>> grid;
auto fill = [&](std::vector<int>& path) {
if (path.size() == 0) path.push_back(1);
std::vector<int> ans;
for (int x: path) ans.push_back(x);
for (int i=path.size(); i<2*N; i++) {
ans.push_back(path[path.size()-1]);
}
std::reverse(ans.begin(), ans.end());
grid.push_back(ans);
};
std::function<void(int)> dfs;
std::vector<int> visited(N+1, 0), path;
dfs = [&](int u) {
visited[u] = 1;
path.push_back(u); path.push_back(u);
fill(path);
for (int v=1; v<=N; v++) {
if (adj_matrix[u][v] && !visited[v]) {
adj_matrix[u][v] =
adj_matrix[v][u] = 0;
dfs(v);
}
}
path.pop_back(); path.pop_back();
fill(path);
}; dfs(1);
std::function<void(int, int)> resolve = [&](int u, int v) {
int pt = 0;
for (int pt=0; pt<grid.size(); pt++)
for (int i=0; i<grid[pt].size() && grid[pt].front() == v; i+=2)
if (grid[pt][i] == u && grid[pt][i+1] == u) {
if (i+2 >= grid[pt].size()) {
grid[pt][i+1] = v;
} else if (grid[pt][i+2] != u && hist_matrix[grid[pt][i+2]][v]) {
grid[pt][i+1] = v;
} else {
grid[pt][i+1] = v;
grid[pt][i+2] = u;
} break;
}
};
for (int i=1; i<=N; i++)
for (int j=1; j<=N; j++)
if (adj_matrix[i][j]) {
adj_matrix[i][j] =
adj_matrix[j][i] = 0;
resolve(i, j);
}
return grid;
}
# | 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... |