Submission #1252515

#TimeUsernameProblemLanguageResultExecution timeMemory
1252515dreamnguyenWorld Map (IOI25_worldmap)C++20
0 / 100
0 ms328 KiB
#include "worldmap.h" #include <vector> #include <queue> using namespace std; vector<vector<int>> create_map(int N, int M, vector<int> A, vector<int> B) { const int K = 2 * N; vector<vector<int>> ans(K, vector<int>(K, 0)); vector<vector<int>> adj(N); vector<vector<bool>> used(K, vector<bool>(K, false)); vector<pair<int, int>> pos(N, {-1, -1}); for (int i = 0; i < M; ++i) { int u = A[i] - 1; int v = B[i] - 1; adj[u].push_back(v); adj[v].push_back(u); } queue<int> q; q.push(0); pos[0] = {K / 2, K / 2}; ans[K / 2][K / 2] = 1; used[K / 2][K / 2] = true; const int dx[4] = {-1, 1, 0, 0}; const int dy[4] = {0, 0, -1, 1}; while (!q.empty()) { int u = q.front(); q.pop(); auto [x, y] = pos[u]; for (int v : adj[u]) { if (pos[v].first != -1) continue; for (int d = 0; d < 4; ++d) { int nx = x + dx[d], ny = y + dy[d]; if (nx < 0 || ny < 0 || nx >= K || ny >= K) continue; if (used[nx][ny]) continue; pos[v] = {nx, ny}; ans[nx][ny] = v + 1; used[nx][ny] = true; q.push(v); break; } } } for (int i = 0; i < N; ++i) { if (pos[i].first != -1) continue; for (int x = 0; x < K; ++x) { for (int y = 0; y < K; ++y) { if (!used[x][y]) { ans[x][y] = i + 1; used[x][y] = true; pos[i] = {x, y}; goto next; } } } next:; } return ans; }
#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...