Submission #1232254

#TimeUsernameProblemLanguageResultExecution timeMemory
1232254alterioLongest Trip (IOI23_longesttrip)C++20
0 / 100
85 ms564 KiB
#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});
        }
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...