제출 #1257815

#제출 시각아이디문제언어결과실행 시간메모리
1257815Rainmaker2627세계 지도 (IOI25_worldmap)C++20
0 / 100
1 ms328 KiB
#include "worldmap.h" using namespace std; #include<cassert> int n, t=0, d=0; std::vector<int> vis; std::vector<std::vector<int>> ans, adj; void fill_diag(int d, int v) { for (int x = 0; x < 2*n; x++) { int y=d-x; if (0<=y && y<2*n) ans[x][y]=v; } } void dfs(int v) { vis[v] = ++t; int diag = d + 1; d += 3; fill_diag(diag - 1, v); fill_diag(diag, v); fill_diag(diag + 1, v); int x = std::max(0, diag - 2 * n + 1); for (int w : adj.at(v)) { if (!vis.at(w)) { dfs(w); fill_diag(d, v); ++d; } else if (vis.at(w) < vis.at(v)) { assert(0 <= diag - x && diag - x < 2 * n); ans.at(x).at(diag - x) = w; ++x; } } } std::vector<std::vector<int>> create_map(int N, int M, std::vector<int> A, std::vector<int> B) { n=N; ans.assign(2 * N, std::vector<int>(2 * N, 0)); adj.assign(N+1, vector<int>()); vis.assign(N + 1, 0); for (int i = 0; i < M; ++i) { adj[A[i]].push_back(B[i]); adj[B[i]].push_back(A[i]); } dfs(1); while (d < 4 * N) { fill_diag(d, 1); ++d; } assert(t == N); 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...