Submission #745763

#TimeUsernameProblemLanguageResultExecution timeMemory
745763vjudge1Cities (BOI16_cities)C++14
0 / 100
226 ms9004 KiB
#include <bits/stdc++.h>

using namespace std;

int main(){

    int n, k, m;
    cin >> n >> k >> m;

    vector<vector<pair<int, int> > > graph(n);
    vector<int> important(k);

    for (int & x : important) cin >> x, x--;

    for (int i = 0; i < m; i++){
        int a, b, c;
        cin >> a >> b >> c;

        a--, b--;
        graph[a].push_back(make_pair(c, b));
        graph[b].push_back(make_pair(c, a));
    }

    // cout << important.size() << endl;
    // for (int x : important) cout << x << " ";
    // cout << endl;

    // cout << 1 << endl;

    long long tenyMo = LONG_LONG_MAX;
    for (int mask = 1; mask < (1 << n); mask++){
        // cout << mask << endl;
        bool jo = true;
        for (int x : important){
            if (!((1 << x) & mask)) {
                
                jo = false;

            }
        }
        if (!jo) continue;

        vector<int> minDist(n, INT_MAX);
        minDist[important.back()] = 0;
        vector<bool> vis(n, false);
        int visCnt = 0;
        long long mo = 0;

        priority_queue<pair<int, int> > q;
        q.push(make_pair(0, important.back()));
        while (!q.empty()){
            int pos = q.top().second, val = -q.top().first;
            q.pop();
            if (vis[pos]) continue;
            mo += val;
            vis[pos] = true;
            visCnt++;
            for (pair<int, int> x : graph[pos]){
                if (vis[x.second] == false && minDist[x.second] > x.first){
                    minDist[x.second] = x.first;
                    q.push(make_pair(-x.first, x.second));
                }
            }
        }
        if (__builtin_popcount(mask) == visCnt){
            tenyMo = min(tenyMo, mo);
        }
    }
    cout << tenyMo << endl;

    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...