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