Submission #1294909

#TimeUsernameProblemLanguageResultExecution timeMemory
1294909gurkotWorld Map (IOI25_worldmap)C++20
22 / 100
20 ms3244 KiB
#include "worldmap.h" #include <vector> #include <map> using namespace std; map <pair<int,int>,int> mp; vector <int> gr[41]; vector <int> ans,s; int way[41][41],fix[41]; int n,k; void go(int u,int v){ int n=gr[v].size(); for (int i=0;i<n;i++){ int w=gr[v][i]; if (w!=u) { ans.push_back(v); go(v,w); } }//i if (v!=1) ans.push_back(v); } void go5(int u,int v){ fix[v]=1; for (int i=1;i<=n;i++) if (fix[i]==0 && way[v][i]==1) { ans.push_back(v); go5(v,i); } if (v!=1) ans.push_back(v); } vector<vector<int>> create_map(int N, int M, vector<int> A, vector<int> B) { n=N; if (M==0) { vector <vector<int>> mymap(1, std::vector<int>(1, 1)); return mymap; } // ****************** 1,2 ******************** if (M==N-1) { for (int i=1;i<=N;i++) gr[i].clear(); for (int i=0;i<M;i++){ gr[A[i]].push_back(B[i]); gr[B[i]].push_back(A[i]); } ans.clear(); go(0,1); k=ans.size(); vector<vector<int>> mymap(k, std::vector<int>(k, 1)); for (int i=0;i<k;i++) for (int j=0;j<k;j++) mymap[i][j]=ans[j]; return mymap; } else { // **************** 5 ******************** for (int i=1;i<=N;i++) { for (int j=1;j<=N;j++) way[i][j]=0; fix[i]=0; } for (int i=0;i<M;i++){ way[A[i]][B[i]]=1; way[B[i]][A[i]]=1; } ans.clear(); go5(0,1); s.clear(); mp.clear(); for (int i=1;i<=n;i++) fix[i]=0; k=ans.size(); int cnt=0; for (int i=0;i<k;i++){ s.push_back(ans[i]); if (fix[ans[i]]==0) { s.push_back(-1); s.push_back(ans[i]); fix[ans[i]]=1; cnt++; if (cnt==N) break; } } k=s.size(); vector<vector<int>> mymap(k, std::vector<int>(k, -1)); for (int i=0;i<k;i++) mymap[0][i]=s[i]; for (int u=1;u<=n;u++) for (int v=1;v<u;v++) if (way[u][v]) { pair <int,int> tmp=make_pair(v,u); if (mp[tmp]==0){ // add(v,u); int nom; for (int i=0;i<k;i++) if (mymap[0][i]==v) {nom=i; break;} for (int i=0;i<k;i++) if (mymap[i][nom+1]==-1) { mymap[i][nom+1]=u; mymap[i+1][nom]=mymap[i+1][nom+1]=mymap[i][nom]; break; } mp[tmp]=1; } }//u,v for (int i=0;i<k;i++) for (int j=0;j<k;j++) if (mymap[i][j]==-1) { if (i==0) mymap[i][j]=mymap[i][j-1]; else mymap[i][j]=mymap[i-1][j]; } return mymap; }//5 }
#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...