#include "longesttrip.h"
#include <bits/stdc++.h> 
#define F first
#define S second
 
using namespace std;
using ll = long long;
using pi = pair<int, int>;
using vi = vector<int>;
 
template<class T> bool ckmin(T& a, T b) { return b < a ? a = b, true : false; }
template<class T> bool ckmax(T& a, T b) { return a < b ? a = b, true : false; }
const int NMAX = 3e2 + 7;
vector<int> g[NMAX];
bool vis[NMAX];
void dfs(int u) {
    vis[u] = 1;
    for (auto v : g[u]) if (!vis[v]) dfs(v);
}
vector<int> longest_trip(int n, int d) {
    for (int i = 0; i < n; ++i) vis[i] = 0, g[i].clear();
    vector<vector<bool>> edge(n, vector<bool>(n, 0));
    vector<int> deg(n);
    ll sumdeg = 0;
    for (int i = 0; i < n; ++i) {
        for (int j = i + 1; j < n; ++j) {
            if (are_connected({i}, {j}) == 1) {
                edge[i][j] = 1;
                edge[j][i] = 1;
                ++deg[i];
                ++deg[j];
                sumdeg += 2;
                g[i].push_back(j);
                g[j].push_back(i);
            }
        }
    }
    dfs(0);
    vector<int> a, b;
    for (int i = 0; i < n; ++i) {
        if (vis[i]) a.push_back(i);
        if (!vis[i]) b.push_back(i);
    }
    if (!a.empty() && !b.empty()) {
        if (a.size() > b.size()) {
            return a;
        } else {
            return b;
        }
    }
    if (sumdeg == n * (n - 1)) {
        vector<int> sol;
        for (int i = 0; i < n; ++i) sol.push_back(i);
        return sol;
    }
    for (int a = 0; a < n; ++a) {
        ll s = sumdeg;
        s -= 2 * deg[a];
        if (s == (n - 1) * (n - 2)) {
            int who = -1;
            for (auto x : g[a]) {
                who = x;
            }
            vector<int> sol;
            for (int i = 0; i < n; ++i) if (i != who && i != a) sol.push_back(i);
            sol.push_back(who);
            sol.push_back(a);
            return sol;
        }
    }
    for (int a = 0; a < n; ++a) {
        for (int b = a + 1; b < n; ++b) {
            if (!edge[a][b]) continue;
            ll s = sumdeg;
            s -= 2 * deg[a];
            s -= 2 * deg[b];
            s += 2;
            if (s == (n - 2) * (n - 3)) {
                int who = -1;
                for (auto x : g[a]) {
                    if (x != b) {
                        who = x;
                    }
                }
                for (auto x : g[b]) {
                    if (x != a) {
                        who = x;
                    }
                }
                vector<int> sol;
                for (int i = 0; i < n; ++i) if (i != who && i != a && i != b) sol.push_back(i);
                sol.push_back(who);
                if (edge[who][a]) sol.push_back(a), sol.push_back(b);
                else sol.push_back(b), sol.push_back(a);
                return sol;
            }
        }
    }
    return {};
}
| # | 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... |