Submission #1232256

#TimeUsernameProblemLanguageResultExecution timeMemory
1232256alterioLongest Trip (IOI23_longesttrip)C++20
40 / 100
339 ms1092 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}); } 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 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...