Submission #716770

#TimeUsernameProblemLanguageResultExecution timeMemory
716770Spade1Cities (BOI16_cities)C++14
100 / 100
3263 ms46560 KiB
#pragma GCC optimize("O3")
#include<bits/stdc++.h>
//#include <grader.h>
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define ld long double
#define st first
#define nd second
#define pb push_back
#define INF INT_MAX
#define db double
using namespace std;

const int N = 1e5 + 10;

int n, k, m;
ll dp[N][32];
int city[5];
vector<pll> adj[N];
priority_queue<pll> pq;

void solve() {
    int n, k, m;cin >> n >> k >> m;
    for (int s = 0; s < (1<<k); ++s) for (int i = 1; i <= n; ++i) dp[i][s] = 1e18;
    for (int i = 0, u; i < k; ++i) {
        cin >> u;
        dp[u][(1<<i)] = 0;
    }
    for (int i = 1; i <= m; ++i) {
        int u, v, w; cin >> u >> v >> w;
        adj[u].pb({v, w}); adj[v].pb({u, w});
    }

    for (int s = 1; s < (1<<k); ++s) {
        for (int j = 0; j < k; ++j) {
            if (s&(1<<j))
                for (int i = 1; i <= n; ++i)
                dp[i][s] = min(dp[i][s], dp[i][(1<<j)] + dp[i][s^(1<<j)]);
        }
        for (int i = 1; i <= n; ++i) pq.push({-dp[i][s], i});
        while (!pq.empty()) {
            int a = pq.top().nd; pq.pop();
            for (auto [b, w] : adj[a]) {
                if (dp[b][s] > dp[a][s] + w) {
                    dp[b][s] = dp[a][s] + w;
                    pq.push({-dp[b][s], b});
                }
            }
        }
    }

    ll ans = LLONG_MAX;
    for (int i = 1; i <= n; ++i) ans = min(ans, dp[i][(1<<k)-1]);
    cout << ans << '\n';
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(NULL);
    int t = 1;
//    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}

Compilation message (stderr)

cities.cpp: In function 'void solve()':
cities.cpp:44:23: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   44 |             for (auto [b, w] : adj[a]) {
      |                       ^
#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...