Submission #1185535

#TimeUsernameProblemLanguageResultExecution timeMemory
1185535qwushaCities (BOI16_cities)C++20
14 / 100
975 ms48644 KiB
#include <bits/stdc++.h> using namespace std; /* #pragma GCC optimize("O3") #include <bitset> #pragma GCC target("avx2")*/ #define fi first #define se second #define int long long typedef long long ll; typedef long double ld; mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count()); int inf = 1e15; int n, k, m; vector<vector<pair<int,int>>> g; pair<vector<int>, vector<int>> dijktra(int st) { vector<int> dist(n, inf); vector<int> par(n, -1); dist[st] = 0; set<pair<int, int>> q = {{0, st}}; while(!q.empty()) { auto pa = *q.begin(); q.erase(q.begin()); int d = pa.fi, v = pa.se; for (auto [u, w] : g[v]) { if (dist[u] > dist[v] + w) { par[u] = v; q.erase({dist[u], u}); dist[u] = dist[v] + w; q.insert({dist[u], u}); } } } return {dist, par}; } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> k >> m; vector<int> a(k); g.resize(n); for (int i = 0; i < k; i++) { cin >> a[i]; a[i]--; } for (int i = 0; i < m; i++) { int v, u, w; cin >> v >> u >> w; g[v - 1].push_back({u - 1, w}); g[u - 1].push_back({v - 1, w}); } vector<vector<int>> di, pars; for (auto el: a) { auto spa = dijktra(el); di.push_back(spa.fi); pars.push_back(spa.se); } int mini = inf; vector<vector<int>> dp((1 << k), vector<int>(n, inf)); for (int i = 0; i < k; i++) { int ma = (1 << i); for (int j = 0; j < n; j++) { dp[ma][j] = di[i][j]; } } for (int ma = 0; ma < (1 << k); ma++) { for (int cen = 0; cen < n; cen++) { for (int subm = 0; subm < (1 << k); subm++) { bool ch = 1; int m2 = 0; for (int i = 0; i < k; i++) { if (((subm >> i) & 1) && !((ma >> i) & 1)) ch = 0; else if (!((subm >> i) & 1) && ((ma >> i) & 1)) { m2 = (m2 | (1 << i)); } } if (!ch || (subm == 0 || m2 == 0)) continue; dp[ma][cen] = min(dp[subm][cen] + dp[m2][cen], dp[ma][cen]); } } } for (int i = 0; i < n; i++) { mini = min(mini, dp[dp.size() - 1][i]); } cout << mini << '\n'; }
#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...