제출 #1286374

#제출 시각아이디문제언어결과실행 시간메모리
1286374Luvidi세계 지도 (IOI25_worldmap)C++20
72 / 100
55 ms7188 KiB
#include "worldmap.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define pii pair<int,int> vector<int> ad[41],st; vector<pii> bs; int d[41]; bool vs[41]; void dfs(int v){ vs[v]=1; st.pb(v); for(int u:ad[v]){ if(vs[u]){ if(d[v]-d[u]>1)bs.pb({u,v}); }else{ d[u]=d[v]+1; dfs(u); st.pb(v); } } } std::vector<std::vector<int>> create_map(int n, int m, std::vector<int> a, std::vector<int> b) { for(int i=1;i<=n;i++){ ad[i].clear(); vs[i]=0; } st.clear(); for(int i=0;i<m;i++){ ad[a[i]].pb(b[i]); ad[b[i]].pb(a[i]); } bs.clear(); dfs(1); // while(d[st[st.size()-2]]==d[st.back()]+1)st.pop_back(); // for(int i:st)cout<<i<<' '; // cout<<'\n'; // for(auto[x,y]:bs)cout<<x<<' '<<y<<'\n'; bool bb[n+1]; memset(bb,0,sizeof(bb)); vector<int> be[n+1]; while(1){ int c[n+1]; memset(c,0,sizeof(c)); for(auto[x,y]:bs){ if(!bb[x]&&!bb[y]){ c[x]++; c[y]++; } } int id=max_element(c+1,c+n+1)-c; if(!c[id])break; for(auto[x,y]:bs){ if(!bb[x]&&!bb[y]){ if(x==id)be[id].pb(y); if(y==id)be[id].pb(x); } } bb[id]=1; // cout<<id<<' '<<c[id]<<'\n'; } vector<int> t; int id[n+1],rm[n+1]; memset(id,-1,sizeof(id)); memset(rm,0,sizeof(rm)); for(int i:st){ t.pb(i); if(id[i]==-1&&bb[i]){ id[i]=t.size(); t.pb(i); t.pb(i); } } st=t; int sz=st.size(); vector<vector<int>> ans(sz,vector<int>(sz)); for(int i=0;i<sz;i++){ for(int j=0;j<sz;j++)ans[i][j]=st[j]; } for(int i=1;i<=n;i++){ for(int j:be[i]){ ans[rm[i]][id[i]]=j; rm[i]+=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...