#include "longesttrip.h"
#include <bits/stdc++.h>
using namespace std;
const int mxn = 256;
vector<int> ans, g[mxn], deg(mxn);
bool visited[mxn];
void dfs(int cur, vector<int> path) {
visited[cur] = 1;
if (path.size() > ans.size()) {
ans = path;
}
int highest = -1, node = -1;
for (auto x : g[cur]) {
if (!visited[x]) {
if (deg[x] > highest) {
highest = deg[x];
node = x;
}
// path.push_back(x);
// dfs(x, path);
// path.pop_back();
}
}
if (node != -1) {
deg[cur]--;
deg[node]--;
path.push_back(node);
dfs(node, path);
path.pop_back();
}
}
vector<int> longest_trip(int N, int D) {
for (int i = 0; i < N; i++) g[i].clear(), deg[i] = 0;
memset(visited, 0, sizeof(visited));
ans = {};
for (int i = 0; i < N; i++) {
for (int j = i + 1; j < N; j++) {
if (are_connected({i}, {j})) {
deg[i]++;
deg[j]++;
g[i].push_back(j);
g[j].push_back(i);
}
}
}
for (int i = 0; i < N; i++) {
if (!visited[i] && g[i].size() == 1) dfs(i, {i});
}
memset(visited, 0, sizeof(visited));
for (int i = N - 1; i >= 0; i--) {
if (!visited[i] && g[i].size() == 1) dfs(i, {i});
}
memset(visited, 0, sizeof(visited));
for (int i = 0; i < N; i++) {
if (!visited[i]) dfs(i, {i});
}
memset(visited, 0, sizeof(visited));
for (int i = N - 1; i >= 0; i--) {
if (!visited[i]) dfs(i, {i});
}
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... |