Submission #948732

#TimeUsernameProblemLanguageResultExecution timeMemory
948732thinknoexit가장 긴 여행 (IOI23_longesttrip)C++17
5 / 100
752 ms680 KiB
#include <bits/stdc++.h> #include "longesttrip.h" using namespace std; using ll = long long; int n, d; vector<int> longest_trip(int N, int D) { n = N; d = D; vector<vector<int>> adj(n, vector<int>(n, 1)); vector<int> deg(n, 0), p(n, 0); for (int i = 0;i < n;i++) { for (int j = i + 1;j < n;j++) { adj[i][j] = adj[j][i] = are_connected({ i }, { j }); if (adj[i][j]) deg[i]++, deg[j]++; } } queue<int> q; for (int i = 0;i < n;i++) { if (deg[i] == n - 1) continue; q.push(i); p[i] = 1; break; } while (!q.empty()) { int v = q.front(); q.pop(); for (int i = 0;i < n;i++) { if (!p[i] && !adj[v][i]) { p[i] = 3 - p[v]; q.push(i); } } } vector<int> r1, r2; for (int i = 0;i < n;i++) { if (!p[i]) p[i] = 1; if (p[i] == 1) r1.push_back(i); else r2.push_back(i); } if ((int)r1.size() == n) return r1; int s1 = r1.size(), s2 = r2.size(); bool ch = 0; for (int i = 0;i < s1;i++) { for (int j = 0;j < s2;j++) { if (adj[r1[i]][r2[j]]) { ch = 1; swap(r1[s1 - 1], r1[i]); swap(r2[0], r2[j]); break; } } } if (!ch) { if ((int)r1.size() > (int)r2.size()) return r1; return r2; } vector<int> ans; for (auto& x : r1) ans.push_back(x); for (auto& x : r2) ans.push_back(x); 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...