Submission #560533

#TimeUsernameProblemLanguageResultExecution timeMemory
560533piOOEFun Tour (APIO20_fun)C++17
10 / 100
260 ms524288 KiB
#include "fun.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; #define all(x) begin(x), end(x) vector<int> createFunTour(int n, int q) { const int infI = 1e9 + 7; vector<vector<int>> dist(n, vector<int>(q)); for (int i = 0; i < n; ++i) { for (int j = i + 1; j < n; ++j) { dist[i][j] = dist[j][i] = hoursRequired(i, j); } } int N = (1 << n); vector<vector<int>> dp(N, vector<int>(n, infI)), p(N, vector<int>(n, -1)); for (int mask = 1; mask < N; ++mask) { vector<int> now; for (int i = 0; i < n; ++i) { if ((mask >> i) & 1) { now.push_back(i); } } if (now.size() == 1) { dp[mask][now[0]] = 0; p[mask][now[0]] = -1; } else { for (int i : now) { int msk = mask ^ (1 << i); for (int j : now) { if (i != j) { if (dp[msk][j] <= dist[i][j] && dp[mask][i] > dist[i][j]) { dp[mask][i] = dist[i][j]; p[mask][i] = j; } } } } } } for (int i = 0; i < n; ++i) { if (dp[N - 1][i] != infI) { vector<int> ans; int mask = N - 1; while (i != -1) { ans.push_back(i); int msk = mask ^ (1 << i); i = p[mask][i]; mask = msk; } return ans; } } assert(false); return {}; }
#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...