Submission #943346

# Submission time Handle Problem Language Result Execution time Memory
943346 2024-03-11T11:11:24 Z GrandTiger1729 Cities (BOI16_cities) C++17
100 / 100
3552 ms 24980 KB
#include <bits/stdc++.h>
using namespace std;

const long long INF = 1e18;
int main()
{
    cin.tie(0)->sync_with_stdio(0);
    int n, K, m;
    cin >> n >> K >> m;
    vector<int> a(K);
    for (int i = 0; i < K; i++)
    {
        cin >> a[i];
        a[i]--;
    }
    vector<vector<pair<int, int>>> g(n);
    for (int i = 0; i < m; i++)
    {
        int u, v, w;
        cin >> u >> v >> w;
        u--, v--;
        g[u].emplace_back(v, w);
        g[v].emplace_back(u, w);
    }
    auto dijkstra = [&](int i)
    {
        priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<>> pq;
        pq.emplace(0, i);
        vector<long long> dis(n, INF);
        vector<bool> vis(n);
        while (pq.size())
        {
            auto [d, u] = pq.top();
            pq.pop();
            if (vis[u])
            {
                continue;
            }
            vis[u] = 1;
            dis[u] = d;
            for (auto &[v, w] : g[u])
            {
                if (dis[v] > dis[u] + w)
                {
                    dis[v] = dis[u] + w;
                    pq.emplace(dis[v], v);
                }
            }
        }
        return dis;
    };
    auto merge = [&](const vector<long long> &b, const vector<long long> &c) -> vector<long long>
    {
        priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<>> pq;
        for (int i = 0; i < n; i++)
        {
            pq.emplace(b[i] + c[i], i);
        }
        vector<long long> ret(n, INF);
        vector<bool> vis(n);
        while (pq.size())
        {
            auto [d, u] = pq.top();
            pq.pop();
            if (vis[u])
            {
                continue;
            }
            vis[u] = 1;
            ret[u] = d;
            for (auto &[v, w] : g[u])
            {
                if (ret[v] > ret[u] + w)
                {
                    ret[v] = ret[u] + w;
                    pq.emplace(ret[v], v);
                }
            }
        }
        return ret;
    };
    sort(a.begin(), a.end());
    vector<vector<long long>> dis(K);
    for (int i = 0; i < K; i++)
    {
        dis[i] = dijkstra(a[i]);
    }
    long long ans = INF;
    vector<int> ord(K);
    iota(ord.begin(), ord.end(), 0);
    do
    {
        vector<long long> res = dis[ord[0]];
        for (int i = 1; i < K - 1; i++)
        {
            res = merge(res, dis[ord[i]]);
        }
        ans = min(ans, res[a[ord[K - 1]]]);
    }
    while (next_permutation(ord.begin(), ord.end() - 1));
    cout << ans << '\n';
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 256 ms 18664 KB Output is correct
2 Correct 262 ms 19060 KB Output is correct
3 Correct 96 ms 13188 KB Output is correct
4 Correct 41 ms 5136 KB Output is correct
5 Correct 106 ms 12400 KB Output is correct
6 Correct 38 ms 5132 KB Output is correct
7 Correct 3 ms 600 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 600 KB Output is correct
2 Correct 4 ms 616 KB Output is correct
3 Correct 3 ms 348 KB Output is correct
4 Correct 3 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 711 ms 19916 KB Output is correct
2 Correct 703 ms 20808 KB Output is correct
3 Correct 398 ms 13768 KB Output is correct
4 Correct 420 ms 13052 KB Output is correct
5 Correct 142 ms 7408 KB Output is correct
6 Correct 51 ms 6864 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3552 ms 21560 KB Output is correct
2 Correct 3462 ms 20756 KB Output is correct
3 Correct 3447 ms 24980 KB Output is correct
4 Correct 2221 ms 16920 KB Output is correct
5 Correct 1764 ms 17616 KB Output is correct
6 Correct 577 ms 11380 KB Output is correct
7 Correct 107 ms 10340 KB Output is correct