Submission #1273368

#TimeUsernameProblemLanguageResultExecution timeMemory
1273368strange420세계 지도 (IOI25_worldmap)C++20
22 / 100
15 ms3300 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...