#include "longesttrip.h"
#include <queue>
#include <stdio.h>
using namespace std;
const int MAX_N = 256;
int n;
int par[MAX_N], dist[MAX_N];
vector<int> adj[MAX_N];
vector<int> getLongestTrip(int s) {
    for (int u = 0; u < n; u++) {
        dist[u] = n;
        par[u] = -1;
    }
    queue<int> q;
    dist[s] = 0;
    q.push(s);
    while (!q.empty()) {
        int u = q.front();
        q.pop();
        for (int v: adj[u]) {
            if (dist[u] + 1 < dist[v]) {
                dist[v] = dist[u] + 1;
                par[v] = u;
                q.push(v);
            }
        }
    }
    int d = s;
    for (int v = 0; v < n; v++) {
        // printf("%d %d %d\n", s, v, dist[v]);
        if (dist[v] < n && dist[v] > dist[d])
            d = v;
    }
    vector<int> ans;
    // printf("%d %d\n", s, d);
    while (d != s) {
        ans.push_back(d);
        d = par[d];
    }
    ans.push_back(s);
    return ans;
}
vector<int> longest_trip(int N, int D) {
    n = N;
    for (int u = 0; u < n; u++) 
        adj[u].clear();
    for (int u = 0; u < n; u++) {
        for (int v = u + 1; v < n; v++)  {
            int x = are_connected({u}, {v});
            if (x) {
                adj[u].push_back(v);
                adj[v].push_back(u);
            }
        }
    }
    vector<int> ans;
    for (int s = 0; s < n; s++) {
        vector<int> cand = getLongestTrip(s);
        if (cand.size() > ans.size())
            ans = cand; 
    }
    return ans;
}
| # | 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... |