Submission #253884

#TimeUsernameProblemLanguageResultExecution timeMemory
253884super_j6Cities (BOI16_cities)C++14
74 / 100
6056 ms165712 KiB
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h> #include <vector> #include <queue> using namespace std; #define endl '\n' #define ll long long #define pi pair<int, int> #define pii pair<ll, pi> #define f first #define s second const int mxn = 100000, mxk = 5; int n, m, k; ll d[1 << mxk][mxn]; vector<pi> g[mxn]; priority_queue<pii, vector<pii>, greater<pii>> pq; int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> n >> k >> m; memset(d, 0x3f, sizeof(d)); memset(d[0], 0, sizeof(d[0])); for(int i = 0; i < k; i++){ int x; cin >> x; x--; pq.push({d[1 << i][x] = 0, {1 << i, x}}); } for(int i = 0; i < m; i++){ int u, v, w; cin >> u >> v >> w; u--, v--; g[u].push_back({v, w}); g[v].push_back({u, w}); } ll ret = 0x3f3f3f3f3f3f3f3f; while(!pq.empty()){ ll dbc = pq.top().f, b = pq.top().s.f, c = pq.top().s.s; pq.pop(); if(dbc != d[b][c]) continue; if(b == (1 << k) - 1) ret = min(ret, d[b][c]); for(pi i : g[c]) for(int j = 0; j < (1 << k); j++){ ll dd = dbc + d[j ^ b][i.f] + i.s; if((j & b) == b && dd < d[j][i.f]){ pq.push({d[j][i.f] = dd, {j, i.f}}); } } } cout << ret << 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...