# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1056409 | 2024-08-13T09:18:23 Z | Ignut | 가장 긴 여행 (IOI23_longesttrip) | C++17 | 0 ms | 0 KB |
/* Ignut started: 13.08.2024 now: 13.08.2024 ████████████████████████████████████████████████████████████████████ ████████████████████████████████ ████████████████████████████████ ██████████████████████████████ ██████████████████████████████ ██████ ██████████████████ ██████████████████ ██████ ██████ ██████████████ ██████████████ ██████ ██████ ██ ████████████ ████████████ ██ ██████ ██████ ████ ██████████ ██████████ ████ ██████ ██████ ████ ██████████ ██████████ ████ ██████ ██████ ████ ██████████ ██████████ ██████ ██████ ██████ ██████ ██████████ ██████████ ██████ ██████ ██████ ██████ ████████ ████████ ██████ ██████ ██████ ██████ ██████ ██████ ██████ ██████ ██████ ████ ████ ████ ████ ██████ ██████ ██████████ ████ ██████████ ██████ ██████ ██ ██████ ████████ ██████ ██ ██████ ██████ ██████ ████████ ██████ ██████ ██████ ██ ██ ██████ ██████████████████████ ████ ████ ██████████████████████ ████████████████████████ ██ ██ ████████████████████████ ██████████████████████████ ██████████████████████████ ██████████████████████████████ ██████████████████████████████ ████████████████████████████████████████████████████████████████████ */ #include <bits/stdc++.h> using namespace std; using ll = long long; mt19937 rnd(11223344); bool are_connected(vector<int> A, vector<int> B); const int MAXN = 333; vector<int> g[MAXN]; bool used[MAXN]; vector<int> order; void dfs(int v) { order.push_back(v); used[v] = true; for (int to : g[v]) { if (used[to]) continue; dfs(to); return; } } vector<int> longest_trip(int N, int D) { if (D == 3) { vector<int> vec; for (int i = 0; i < N; i ++) vec.push_back(i); return vec; } if (D == 2) { vector<pair<int, int>> lst; int cnt[N] = {}; for (int i = 0; i < N; i ++) { for (int j = i + 1; j < N; j ++) { if (!are_connected({i}, {j})) { lst.push_back({i, j}); cnt[i] ++, cnt[j] ++; } } } vector<int> free; for (int i = 0; i < N; i ++) if (cnt[i] == 0) free.push_back(i); vector<int> res; for (int i = 0; i < lst.size(); i ++) res.push_back(lst[i].first); for (int val : free) res.push_back(val); for (int i = 0; i < lst.size(); i ++) res.push_back(lst[i].second); return res; } order.clear(); for (int i = 0; i < N; i ++) { g[i].clear(); used[i] = false; } for (int i = 0; i < N; i ++) { for (int j = i + 1; j < N; j ++) { if (are_connected({i}, {j})) { g[i].push_back(j); g[j].push_back(i); } } } vector<int> res; for (int start = 0; start < N; start ++) { for (int i= 0; i < N; i ++) { used[i] = false; shuffle(g[i].begin(), g[i].end(), rnd); } order.clear(); dfs(start); if (order.size() > res.size()) res = order; } return res; } int main() { ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0); #ifndef ONLINE_JUDGE freopen("input123.txt", "r", stdin); freopen("output123.txt", "w", stdout); #endif return 0; } /* */