제출 #464039

#제출 시각아이디문제언어결과실행 시간메모리
464039Elias즐거운 행로 (APIO20_fun)C++17
26 / 100
115 ms16700 KiB
#include "fun.h" #include <vector> #include <climits> using namespace std; vector<vector<int>> adj; vector<bool> blocked; pair<int, int> dfsLongest(int i, int parent = -1) { pair<int, int> longest{0, i}; for (int c : adj[i]) { if (c == parent || blocked[c]) continue; auto newLongest = dfsLongest(c, i); newLongest.first++; longest = max(longest, newLongest); } return longest; } vector<signed> createFunTour(signed N, signed Q) { adj = vector<vector<int>>(N); for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) if (hoursRequired(i, j) == 1) // vertices are connected adj[i].push_back(j); vector<int> solution; blocked = vector<bool>(N); int node = dfsLongest(0).second; for (int i = 0; i < N; i++) { int longestNode = dfsLongest(node).second; solution.push_back(node); blocked[node] = true; node = longestNode; } return solution; } /*int npow = (1LL << N); vector<vector<int>> dp(n, vector<int>(npow, LLONG_MAX)); dp[0][0] = 0; for (int bm = 1; bm < npow; bm++) { for (int v = 0; v < n; v++) { for (int u = 0; u < n; u++) { if (u == v) continue; if (((1LL << u) & bm) == 0) // check that node was visited continue; dp[bm][v] = min(dp[bm - (1LL << u)][u] + hoursRequired(u, v), dp[bm][v]); } } }*/
#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...