#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... |