#include "longesttrip.h"
#include<bits/stdc++.h>
using namespace std;
vector<int> longest_trip(int N, int D){
    vector<int> p;
    vector<bool> in(N, false);
    p.push_back(0);
    in[0] = true;
    bool rev = false;
    while (true){
        if (p.size() == N) return p;
        vector<int> v;
        for (int i=0; i<N; i++){
            if (!in[i]) v.push_back(i);
        }
        if (!are_connected({p.back()}, v)){
            if (rev) break;
            rev = true;
            reverse(p.begin(), p.end());
        }
        else {
            int l = 0, r = N;
            while (l < r-1){
                int m = (l+r)/2;
                v.clear();
                for (int i=l; i<m; i++){
                    if (!in[i]) v.push_back(i);
                }
                if (v.size() == 0 || !are_connected({p.back()}, v)) l = m;
                else r = m;
            }
            p.push_back(l);
            in[l] = true;
        }
    }
    if (p.size() == N) return p;
    for (int i=1; i<(int)p.size()-1; i++){
        vector<int> v;
        for (int j=0; j<N; j++){
            if (!in[j]) v.push_back(j);
        }
        if (!are_connected({p[i]}, v)) continue;
        for (int j=0; j<N; j++){
            if (in[j]) continue;
            if (are_connected({p[i]}, {j})){
                vector<int> np;
                for (int ci=i+1; ci<p.size(); ci++) np.push_back(p[ci]);
                for (int ci=0; ci<=i; ci++) np.push_back(p[ci]);
                np.push_back(j);
                in[j] = true;
                for (int ci=0; ci<N; ci++){
                    if (!in[ci]) np.push_back(ci);
                }
                return np;
            }
        }
    }
    if (p.size() > N/2) return p;
    vector<int> np;
    for (int i=0; i<N; i++){
        if (!in[i]) np.push_back(i);
    }
    return np;
}
| # | 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... |