이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#include "longesttrip.h"
#define MX 100100
using namespace std;
int n,now,x,y,z,xx,yy,gg,zz,to[MX];
vector<int>A,B,ans,ans1,ans2,a[MX];
// queue<int>d;
// bool are_connected(std::vector<int> A, std::vector<int> B)
bool check(int x,int y)
{
    A.clear();B.clear();
    A.push_back(x);
    B.push_back(y);
    return are_connected(A,B);
}
bool checkk(int x,vector<int> G)
{
    A.clear();
    A.push_back(x);
    return are_connected(A,G);
}
bool checkkk(int x,vector<int> G)
{
    A.clear();
    for(int i=0;i<=x;++i)
        A.push_back(ans1[i]);
    return are_connected(A,G);
}
bool checkkkk(int x,int y)
{
    A.clear();
    A.push_back(x);
    B.clear();
    for(int i=0;i<=y;++i)
        B.push_back(ans2[i]);
    return are_connected(A,B);
}
void dfs(int x,int fa)
{
    ans1.push_back(x);
    for(int i=0;i<a[x].size();++i)
        if(a[x][i]!=fa)
            dfs(a[x][i],x);
    return;
}
void dfss(int x,int fa)
{
    ans2.push_back(x);
    for(int i=0;i<a[x].size();++i)
        if(a[x][i]!=fa)
            dfss(a[x][i],x);
    return;
}
mt19937 gy(2018729);
int rd(int l,int r)
{
    return gy()%(r-l+1)+l;
}
std::vector<int> longest_trip(int N, int D)
{
    n=N;
    for(int i=0;i<n;++i)
        a[i].clear();
    
    x=0;
    to[x]=x;
    y=1;
    to[y]=y;
    gg=0;
    for(int i=2;i<n;++i){
        z=i;
        to[z]=z;
        if(check(x,z)){
            a[x].push_back(z);
            a[z].push_back(x);
            xx=to[x];
            zz=to[z];
            to[xx]=zz;
            to[zz]=xx;
            x=xx;
            gg=0;
        }
        else if(!gg&&check(x,y)){
            a[x].push_back(y);
            a[y].push_back(x);
            xx=to[x];
            yy=to[y];
            to[xx]=yy;
            to[yy]=xx;
            x=xx;y=z;
            gg=0;
        }
        else {
            a[y].push_back(z);
            a[z].push_back(y);
            yy=to[y];
            zz=to[z];
            to[yy]=zz;
            to[zz]=yy;
            y=yy;
            gg=1;
        }
    }
    ans1.clear();
    ans2.clear();
    ans.clear();
    dfs(x,x);
    dfss(y,y);
    if(!are_connected(ans1,ans2)){
        if(ans1.size()>ans2.size())return ans1;
        else return ans2;
    }
    xx=to[x];
    yy=to[y];
    A.clear();
    B.clear();
    A.push_back(x);
    if(x!=xx)A.push_back(xx);
    B.push_back(y);
    if(y!=yy)B.push_back(yy);
    if(are_connected(A,B)){
        if(check(x,y)){
            for(int i=ans1.size()-1;i>=0;--i)
                ans.push_back(ans1[i]);
            for(int i=0;i<ans2.size();++i)
                ans.push_back(ans2[i]);
        }
        else if(check(x,yy)){
            for(int i=ans1.size()-1;i>=0;--i)
                ans.push_back(ans1[i]);
            for(int i=ans2.size()-1;i>=0;--i)
                ans.push_back(ans2[i]);
        }
        else if(check(xx,y)){
            for(int i=0;i<ans1.size();++i)
                ans.push_back(ans1[i]);
            for(int i=0;i<ans2.size();++i)
                ans.push_back(ans2[i]);
        }
        else if(check(xx,yy)){
            for(int i=0;i<ans1.size();++i)
                ans.push_back(ans1[i]);
            for(int i=ans2.size()-1;i>=0;--i)
                ans.push_back(ans2[i]);
        }
    }
    else{
        int l=0,r=ans1.size()-1;
        while(l<r){
            int mid=l+r>>1;
            if(checkkk(mid,ans2))r=mid;
            else l=mid+1;
        }
        int sav=l;
        l=0;r=ans2.size()-1;
        while(l<r){
            int mid=l+r>>1;
            if(checkkkk(ans1[sav],mid))r=mid;
            else l=mid+1;
        }
        int i=sav,j=l;
               for(int k=i+1;k<ans1.size();++k)
                    ans.push_back(ans1[k]);
               for(int k=0;k<=i;++k)
                    ans.push_back(ans1[k]);
               for(int k=j;k<ans2.size();++k)
                    ans.push_back(ans2[k]);
               for(int k=0;k<j;++k)
                    ans.push_back(ans2[k]);
            return ans;
    }
    return ans;
}
컴파일 시 표준 에러 (stderr) 메시지
longesttrip.cpp: In function 'void dfs(int, int)':
longesttrip.cpp:42:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |     for(int i=0;i<a[x].size();++i)
      |                 ~^~~~~~~~~~~~
longesttrip.cpp: In function 'void dfss(int, int)':
longesttrip.cpp:50:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |     for(int i=0;i<a[x].size();++i)
      |                 ~^~~~~~~~~~~~
longesttrip.cpp: In function 'std::vector<int> longest_trip(int, int)':
longesttrip.cpp:126:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  126 |             for(int i=0;i<ans2.size();++i)
      |                         ~^~~~~~~~~~~~
longesttrip.cpp:136:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  136 |             for(int i=0;i<ans1.size();++i)
      |                         ~^~~~~~~~~~~~
longesttrip.cpp:138:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  138 |             for(int i=0;i<ans2.size();++i)
      |                         ~^~~~~~~~~~~~
longesttrip.cpp:142:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  142 |             for(int i=0;i<ans1.size();++i)
      |                         ~^~~~~~~~~~~~
longesttrip.cpp:151:22: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  151 |             int mid=l+r>>1;
      |                     ~^~
longesttrip.cpp:158:22: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  158 |             int mid=l+r>>1;
      |                     ~^~
longesttrip.cpp:163:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  163 |                for(int k=i+1;k<ans1.size();++k)
      |                              ~^~~~~~~~~~~~
longesttrip.cpp:167:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  167 |                for(int k=j;k<ans2.size();++k)
      |                            ~^~~~~~~~~~~~| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |