Submission #1293694

#TimeUsernameProblemLanguageResultExecution timeMemory
1293694tschav_세계 지도 (IOI25_worldmap)C++20
12 / 100
3 ms1096 KiB
#include "worldmap.h" #include <bits/stdc++.h> using namespace std; vector<vector<int>> create_map(int n, int m, vector<int> A, vector<int> B) { vector<vector<int>> adj; adj.resize(n+1,vector<int>{}); for(int i = 0; i < m; ++i) { adj[A[i]].emplace_back(B[i]); adj[B[i]].emplace_back(A[i]); } if(m == 0){ return vector<vector<int>>{vector<int>{1}}; } vector<int> row; vector<bool> vis(n+1,false); int C = 0 ; auto dfs = [&](int ind, auto &&dfs) -> void { vis[ind]=true; ++C; row.push_back(ind); for(auto &u : adj[ind]) { if(vis[u] ) continue; dfs(u,dfs); if(C!=n)row.push_back(ind); } }; dfs(1, dfs); // for(int i = 0; i < row.size();++i){ // cerr << row[i] << " "; // } map<int,int>freq; int sz = 1; for(int i = 1; i < row.size();++i){ if(freq[row[i]]){ ++sz; }else{sz+=2;} ++freq[row[i]]; } vector<vector<int>> ans(sz, vector<int>(sz, 1)); vector<bool> F(n+1,false); int last= 0; int L = 0; int lastt = 0; int par = 1; if(true){ queue<int> Q; int u= row[L]; for(auto &v : adj[u]){ Q.push(v); } for(int i = 0; i < sz; ++i){ if((i & 1) == par or Q.empty()){ ans[i][0] = u; }else{ ans[i][0] = Q.front(); Q.pop(); } } F[u]=true; } ++L; for(int i = 1; i < sz; ++i){ int u = row[L]; if(F[u]){ lastt = i; for(int j = 0; j < sz;++ j){ ans[j][i] = u; } ++L; continue; } if(i==lastt+1){ int w = row[L-1]; //cerr << endl; //cerr << u << " " << w; for(int j = 0; j < sz;++ j){ if((j & 1) == par){ ans[j][i] = u; }else ans[j][i] = w; } par ^= 1; continue; } if( i == lastt+2){ queue<int> Q; for(auto &v : adj[u]){ Q.push(v); } for(int j = 0; j < sz; ++j){ if((j & 1) == par or Q.empty()){ ans[j][i] = u; }else{ ans[j][i] = Q.front(); Q.pop(); } } F[u] = true; lastt+=2; ++L; } } // for(int i = 0; i < row.size(); ++i) { // int u = row[i]; // queue<int> Q; // for(auto &v : adj[u]){ // Q.push(v); // } // if(F[u]){ // for(int j = 0; j < sz;++j)ans[j][last]=u; // ++last; // }else{ // int p1 = last; // int p2 = last+1; // int p3 = last+2; // for(int j = 0; j < sz; ++j){ // if(j & 1 or Q.empty()){ // ans[j][p1]=ans[j][p2]=ans[j][p3]=u; // }else{ // ans[j][p1]=ans[j][p3]=u; // ans[j][p2]=Q.front(); // Q.pop(); // } // } // last+=3; // } // F[u]=true; // } return ans; } // int main() { // auto ans = create_map(6,9,vector<int>{1,2,3,4,5,6,1,1,2},vector<int>{2,3,4,5,6,1,3,4,5}); // for(auto &v: ans){ // for(auto &i: v){ // cout << i << " "; // } // cout << endl; // } // }
#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...