Submission #1222567

#TimeUsernameProblemLanguageResultExecution timeMemory
1222567minhpkCities (BOI16_cities)C++20
52 / 100
1244 ms61820 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

int a, b, c;
int t[10000];
vector<pair<int, int>> z[1000005];
int cnt[100005][27];
int bruh = 1e18;

void dijkstra() {
    for (int i = 1; i <= a; i++) {
        for (int j = 0; j < (1 << b); j++) {
            cnt[i][j] = bruh;
        }
    }
    for (int i = 0; i < b; i++) {
        cnt[t[i]][1 << i] = 0;
    }

    for (int mask = 0; mask < (1 << b); mask++) {
        for (int i = 1; i <= a; i++) {
            for (int submask = (mask - 1) & mask; submask; submask = (submask - 1) & mask) {
                cnt[i][mask] = min(cnt[i][mask], cnt[i][submask] + cnt[i][mask ^ submask]);
            }
        }

        priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
        for (int i = 1; i <= a; i++) {
            if (cnt[i][mask] != bruh) {
                q.push({cnt[i][mask], i});
            }
        }

        while (!q.empty()) {
            auto [val, u] = q.top(); q.pop();
            if (val > cnt[u][mask]) continue;
            for (auto [v, w] : z[u]) {
                if (cnt[v][mask] > val + w) {
                    cnt[v][mask] = val + w;
                    q.push({cnt[v][mask], v});
                }
            }
        }
    }

    int res = bruh;
    for (int i = 1; i <= a; i++) {
        res = min(res, cnt[i][(1 << b) - 1]);
    }
    cout << res << "\n";
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> a >> b >> c;
    for (int i = 0; i < b; i++) {
        cin >> t[i];
    }
    for (int i = 1; i <= c; i++) {
        int x, y, t;
        cin >> x >> y >> t;
        z[x].push_back({y, t});
        z[y].push_back({x, t});
    }
    dijkstra();
    return 0;
}
#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...