Submission #1311942

#TimeUsernameProblemLanguageResultExecution timeMemory
1311942Cyanberry세계 지도 (IOI25_worldmap)C++20
86 / 100
37 ms5644 KiB
#include "worldmap.h" #include <bits/stdc++.h> using namespace std; vector<int> visited; vector<int> ret; vector<vector<int>> graf, extras; bool dfs(int curr, int depth) { if (visited[curr]) return false; visited[curr] = depth; for (int i = 0; i < graf[curr].size(); ++i) { ret.push_back(curr+1); if (visited[graf[curr][i]] > depth) { extras[curr].push_back(graf[curr][i]+1); } if (visited[graf[curr][i]]) continue; dfs(graf[curr][i], depth + 1); } ret.push_back(curr+1); return true; } std::vector<std::vector<int>> create_map(int N, int M, vector<int> A, vector<int> B) { ret.clear(); visited.assign(N, 0); graf.assign(N, vector<int>{}); extras.assign(N, vector<int>{}); for (int i = 0; i < M; ++i) { graf[A[i]-1].push_back(B[i] - 1); graf[B[i]-1].push_back(A[i] - 1); } // cout<<"E"<<endl; dfs(0, 1); // cout<<"S"<<ret.size()<<endl; vector<bool> exists(N+1, false); vector<int> doubleBars(ret.size() * 2, 0); vector<vector<int>> ans; int id = 1; int len = 0; for (int i = 0; i < ret.size(); ++i) { if (i > 0 && ret[i] == ret[i-1]) continue; if (exists[ret[i]]) { ++len; continue; } exists[ret[i]] = true; doubleBars[len] = id; ++id; len += 2; } exists.assign(N+1, false); for (int i = 0; i < ret.size(); ++i) { if (i > 0 && ret[i] == ret[i-1]) continue; if (exists[ret[i]]) { ans.push_back(vector<int>(len, ret[i])); continue; } exists[ret[i]] = true; for (int j = 0; j <= 1; ++j) { // cout<<(3 * i + j)<<endl; ans.push_back(vector<int>(len, ret[i])); if (j == 0) { for (int k = 0; k < extras[ret[i]-1].size(); ++k) { ans[ans.size()-1][2*k + (doubleBars[ans.size()-1] & 1)] = extras[ret[i]-1][k]; for (int l = ans.size()-2; l >= 0; --l) { ans[l][2*k+(doubleBars[ans.size()-1] & 1)] = ans[l+1][2*k + (doubleBars[ans.size()-1] & 1)+1]; if (doubleBars[l] != 0) { break; } } } } } } 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...