제출 #1258358

#제출 시각아이디문제언어결과실행 시간메모리
1258358allin27xWorld Map (IOI25_worldmap)C++20
100 / 100
106 ms2888 KiB
#include "worldmap.h" #include <bits/stdc++.h> using namespace std; const int N = 44; int k; int n; vector<vector<int>> mp; int adj[N][N]; int vis[N]; int cur; int diag[N]; void fill_current(int col){ for (int i=0; i<k; i++) for (int j=0; j<k; j++) if (j-i == cur) mp[i][j] = col; cur++; } void fill_neighbors(int idx){ vector<int> ng; for (int i=1; i<=n; i++) if (adj[idx][i]) ng.push_back(i); while (ng.size() < k) ng.push_back(idx); int nid = 0; for (int i=0; i<k; i++) for (int j=0; j<k; j++) if (j-i == diag[idx]) mp[i][j] = ng[nid++]; } void dfs(int nw){ vis[nw] = 1; fill_current(nw); diag[nw] = cur++; fill_current(nw); for (int c=0; c<=n; c++){ if (!adj[c][nw] || vis[c]) continue; dfs(c); fill_current(nw); } } std::vector<std::vector<int>> create_map(int n, int m, std::vector<int> a, std::vector<int> b) { k = 2*n; ::n = n; mp.assign(k, vector<int> (k,0)); for (int i=0; i<N; i++) for (int j=0; j<N; j++) adj[i][j] = 0; for (int i=0; i<m; i++) adj[a[i]][b[i]] = 1, adj[b[i]][a[i]] = 1; for (int i=0; i<N; i++) vis[i] = 0; cur = -k+1; dfs(1); vector<pair<int,int>> nd; for (int i=1; i<=n; i++) nd.push_back({abs(diag[i]), i}); sort(nd.begin(), nd.end()); for (auto [_, idx]: nd){ fill_neighbors(idx); for (int i=1; i<=n; i++) adj[i][idx] = 0, adj[idx][i] = 0; } return mp; }
#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...