Submission #1252566

#TimeUsernameProblemLanguageResultExecution timeMemory
1252566Clan328World Map (IOI25_worldmap)C++20
86 / 100
42 ms5592 KiB
#include "worldmap.h" #include <bits/stdc++.h> using namespace std; #define pb push_back vector<vector<int>> G; vector<int> order, visited; void dfs(int v) { order.pb(v); visited[v] = true; for (auto u : G[v]) { if (visited[u]) continue; dfs(u); order.pb(v); } } std::vector<std::vector<int>> create_map(int N, int M, std::vector<int> A, std::vector<int> B) { G = vector<vector<int>>(N); for (int i = 0; i < M; i++) { G[A[i]-1].push_back(B[i]-1); G[B[i]-1].push_back(A[i]-1); } order = vector<int>(); visited = vector<int>(N); dfs(0); std::vector<std::vector<int>> ans(2*N + order.size() - N, std::vector<int>(2*N + order.size() - N, 1)); visited = vector<int>(N); int idx = 0; for (int j = 0; j < order.size(); j++) { int x = order[j]; if (visited[x]) { if (ans[idx-1][0] == order[j-1]+1) { for (int i = 0; i < ans.size(); i++) { if (i % 2 == 0) ans[idx][i] = x+1; else ans[idx][i] = order[j-1]+1; } } else { for (int i = 0; i < ans.size(); i++) { if (i % 2 == 1) ans[idx][i] = x+1; else ans[idx][i] = order[j-1]+1; } } // for (int i = 0; i < ans.size(); i++) { // if (ans[idx-1][i] == order[j-1]+1) // ans[idx][i] = x+1; // else // ans[idx][i] = order[j-1]+1; // } idx++; continue; } visited[x] = true; for (int i = 0; i < ans.size(); i++) { ans[idx][i] = x+1; ans[idx+1][i] = x+1; } if (j != 0) { if (ans[idx-1][0] != order[j-1]+1) { for (int i = 0; i < ans.size(); i+=2) { ans[idx][i] = order[j-1]+1; } } else { for (int i = 1; i < ans.size(); i+=2) { ans[idx][i] = order[j-1]+1; } } // for (int i = 0; i < ans.size(); i++) { // if (ans[idx-1][i] != order[j-1]+1) // ans[idx][i] = order[j-1]+1; // } } if (ans[idx][0] != order[j-1]+1) { int curr = 0; for (auto u : G[x]) { ans[idx+1][curr] = u+1; curr += 2; } } else { int curr = 1; for (auto u : G[x]) { ans[idx+1][curr] = u+1; curr += 2; } } // int curr = 0; // for (auto u : G[x]) { // if (ans[idx][curr] != order[j-1]+1) { // ans[idx+1][curr] = u+1; // ans[idx+1][curr+1] = x+1; // } else { // ans[idx+1][curr+1] = u+1; // ans[idx+1][curr] = x+1; // } // curr += 2; // } idx += 2; } 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...