# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1245768 | daotuankhoi | Cities (BOI16_cities) | C++20 | 1094 ms | 40504 KiB |
#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 42
#endif
const int64_t INF = 0x3f3f3f3f3f3f3f3f;
int special[5];
const int MAXN = 1e5;
int64_t dp[1 << 5][MAXN];
vector<pair<int, int>> g[MAXN];
int n, m, k;
void dijkstra(int mask) {
using T = pair<int64_t, int>;
priority_queue<T, vector<T>, greater<T>> pq;
for (int i = 1; i <= n; i++) {
if (dp[mask][i] != INF) {
pq.emplace(dp[mask][i], i);
}
}
while (pq.size()) {
auto [d, u] = pq.top();
pq.pop();
if (d > dp[mask][u]) continue;
for (auto [v, w] : g[u]) {
if (dp[mask][v] > dp[mask][u] + w) {
dp[mask][v] = dp[mask][u] + w;
pq.emplace(dp[mask][v], v);
}
}
}
}
int main() {
#define NAME ""
if (fopen(NAME".inp", "r")) {
freopen(NAME".inp", "r", stdin);
freopen(NAME".out", "w", stdout);
}
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> k >> m;
for (int i = 0; i < k; i++) cin >> special[i];
int u, v, w;
for (int i = 1; i <= m; i++) {
cin >> u >> v >> w;
g[u].emplace_back(v, w);
g[v].emplace_back(u, w);
}
memset(dp, 0x3f, sizeof dp);
for (int i = 0; i < k; i++) {
dp[1 << i][special[i]] = 0;
}
for (int mask = 0; mask < (1 << k); mask++) {
for (int sub = (mask - 1) & mask; sub; sub = (sub - 1) & mask) {
for (int i = 1; i <= n; i++) {
dp[mask][i] = min(dp[mask][i], dp[sub][i] + dp[mask ^ sub][i]);
}
}
dijkstra(mask);
}
int64_t ans = INF;
for (int i = 1; i <= n; i++) ans = min(ans, dp[(1 << k) - 1][i]);
cout << ans << '\n';
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |