Submission #1251470

#TimeUsernameProblemLanguageResultExecution timeMemory
1251470windowwifeWorld Map (IOI25_worldmap)C++20
100 / 100
20 ms2888 KiB
#ifndef rtgsp #include "worldmap.h" #endif // rtgsp #include<bits/stdc++.h> #define ll long long #define task "" using namespace std; const int maxn = 1602; int n, m, cnt, diag, d[maxn], from[maxn], to[maxn], mx[maxn], best[maxn]; bool visited[maxn]; vector<int> euler, be[maxn], adj[maxn]; void dfs (int u) { euler.push_back(u); visited[u] = true; for (int v : adj[u]) { if (visited[v]) { if (d[u] < d[v]) { from[++cnt] = u; to[cnt] = v; } } else { d[v] = d[u] + 1; dfs(v); euler.push_back(u); } } } vector<vector<int>> create_map(int N, int M, vector<int> A, vector<int> B) { n = N; m = M; cnt = 0; euler.clear(); vector<vector<int>> mp(2*n, vector<int>(2*n, 1)); for (int i = 1; i <= n; i++) { d[i] = 0; mx[i] = 0; visited[i] = false; be[i].clear(); adj[i].clear(); } for (int i = 0; i < m; i++) { adj[A[i]].push_back(B[i]); adj[B[i]].push_back(A[i]); } dfs(1); for (int i = 0; i < 2*n - 1; i++) mx[euler[i]] = max(mx[euler[i]], min(i, 2*n - 2 - i)); for (int i = 1; i <= cnt; i++) { if (mx[from[i]] < mx[to[i]]) swap(from[i], to[i]); be[from[i]].push_back(to[i]); } for (int i = 0; i < 2*n - 1; i++) { if (mx[euler[i]] == min(i, 2*n - 2 - i)) best[euler[i]] = i; } diag = 0; for (int i = 0; i < 2*n - 1; i++) { if (best[euler[i]] != i) { for (int j = max(0, diag - (2*n - 1)); j <= min(diag, 2*n - 1); j++) mp[j][diag - j] = euler[i]; diag++; } else { for (int j = max(0, diag - (2*n - 1)); j <= min(diag, 2*n - 1); j++) mp[j][diag - j] = euler[i]; diag++; int cur = 0; for (int j = max(0, diag - (2*n - 1)); j <= min(diag, 2*n - 1); j++) { if (cur < (int)be[euler[i]].size()) mp[j][diag - j] = be[euler[i]][cur]; else mp[j][diag - j] = euler[i]; cur++; } diag++; for (int j = max(0, diag - (2*n - 1)); j <= min(diag, 2*n - 1); j++) mp[j][diag - j] = euler[i]; diag++; visited[euler[i]] = true; } } return mp; } #ifdef rtgsp int main() { freopen(task".in", "r", stdin); //freopen(task".OUT", "w", stdout); ios_base::sync_with_stdio(false); cin.tie(nullptr); string s; int T; cin >> s >> T >> T; while (T--) { int N, M; vector<int> A, B; A.clear(); B.clear(); cin >> N >> M; for (int i = 0; i < M; i++) { int x, y; cin >> x >> y; A.push_back(x); B.push_back(y); } auto mp = create_map(N, M, A, B); for (auto i : mp) { for (auto j : i) cout << j << " "; cout << '\n'; } } } #endif // rtgsp
#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...