제출 #1161287

#제출 시각아이디문제언어결과실행 시간메모리
1161287The_SamuraiLongest Trip (IOI23_longesttrip)C++20
40 / 100
433 ms844 KiB
#include "longesttrip.h"
#include "bits/stdc++.h"
using namespace std;

mt19937 rng(time(0));
int rand(int l, int r) {
    int x = rng(); x = abs(x);
    return x % (r - l + 1) + l;
}

vector<int> longest_trip(int n, int d) {
    vector can(n, vector(n, false));
    vector<vector<int>> g(n);
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            bool p = are_connected({i}, {j});
            if (!p) continue;
            can[i][j] = can[j][i] = p;
            g[i].emplace_back(j);
            g[j].emplace_back(i);
            // if (can[i][j]) cout << '\t' << i << ' ' << j << endl;
        }
    }

    vector<bool> vis(n);
    vector<int> way, ans;
    auto dfs = [&](auto &dfs, int u) -> void {
        way.emplace_back(u);
        if (ans.size() < way.size()) ans = way;
        vis[u] = true;
        // for (int i = 1; i < g[u].size(); i++) swap(g[u][i], g[u][rand(0, i)]);
        for (int v: g[u]) {
            if (!vis[v]) dfs(dfs, v);
        }
        way.pop_back();
    };
    for (int t = 0; t < 1; t++) for (int i = 0; i < n; i++) {
        vis = vector(n, false);
        dfs(dfs, 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...