Submission #987442

#TimeUsernameProblemLanguageResultExecution timeMemory
987442Pyqe가장 긴 여행 (IOI23_longesttrip)C++17
5 / 100
822 ms5336 KiB
#include <bits/stdc++.h> #include "longesttrip.h" using namespace std; long long n,nn[2],dh[100069],pr[100069],ex[2][100069],tmp[100069],sq[100069],zs; bitset<100069> vtd; inline bool qr(vector<long long> v,vector<long long> v2) { long long i,sz; vector<int> cv,cv2; sz=v.size(); for(i=0;i<sz;i++) { cv.push_back(v[i]-1); } sz=v2.size(); for(i=0;i<sz;i++) { cv2.push_back(v2[i]-1); } return are_connected(cv,cv2); } void dfs(long long x) { long long i; vtd[x]=1; for(i=1;i<=n;i++) { if(!vtd[i]&&!qr({x},{i})) { dh[i]=dh[x]+1; pr[i]=x; dfs(i); } } } bool cmdh(long long x,long long y) { return dh[x]<dh[y]; } vector<int> longest_trip(int on,int d) { long long i,ii,jj,k,l,sz,e; vector<long long> cv,cv2; vector<int> ret; n=on; vtd.reset(); for(ii=0;ii<2;ii++) { nn[ii]=0; } for(i=1;i<=n;i++) { if(!vtd[i]) { dh[i]=0; dfs(i); } e=dh[i]%2; nn[e]++; ex[e][nn[e]]=i; } for(ii=0;ii<2;ii++) { sort(ex[ii]+1,ex[ii]+nn[ii]+1,cmdh); sz=0; l=-1; vtd.reset(); for(i=nn[ii];i;i--) { k=ex[ii][i]; if(l==-1) { l=k; } else if(dh[k]!=dh[l]) { l=pr[pr[l]]; sz++; tmp[sz]=l; vtd[l]=1; } if(!vtd[k]) { sz++; tmp[sz]=k; l=k; } } for(i=1;i<=sz;i++) { ex[ii][i]=tmp[i]; } } zs=0; for(i=1;i<=nn[0];i++) { cv.push_back(ex[0][i]); } for(i=1;i<=nn[1];i++) { cv2.push_back(ex[1][i]); } if(!nn[1]||!qr(cv,cv2)) { e=nn[1]>nn[0]; for(i=1;i<=nn[e];i++) { zs++; sq[zs]=ex[e][i]; } } else { for(ii=0;ii<2;ii++) { k=ex[0][1]; for(jj=0;jj<2;jj++) { l=ex[1][1]; if(!zs&&qr({k},{l})) { for(i=nn[0];i;i--) { zs++; sq[zs]=ex[0][i]; } for(i=1;i<=nn[1];i++) { zs++; sq[zs]=ex[1][i]; } } reverse(ex[1]+1,ex[1]+nn[1]+1); } reverse(ex[0]+1,ex[0]+nn[0]+1); } if(!zs) { } } for(i=1;i<=zs;i++) { ret.push_back(sq[i]-1); } return ret; }
#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...