제출 #253859

#제출 시각아이디문제언어결과실행 시간메모리
253859super_j6Cities (BOI16_cities)C++14
51 / 100
6073 ms68832 KiB
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h> #include <vector> #include <set> using namespace std; #define endl '\n' #define ll long long #define pi pair<ll, ll> #define f first #define s second ll inf = 0x3f3f3f3f3f3f3f3f; const int mxn = 100000, mxk = 6; int n, m, k; int a[mxk], s[mxk]; vector<ll> d[mxn]; vector<pi> g[mxn]; set<pi> pq; int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> n >> k >> m; for(int i = 0; i < k; i++){ cin >> a[i]; a[i]--; } 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}); } for(int s = 0; s < n; s++){ if(k > 3 || count(a, a + k, s)){ d[s].assign(n, inf); d[s][s] = 0; pq.insert({0, s}); while(!pq.empty()){ int c = pq.begin()->s; pq.erase(pq.begin()); for(pi i : g[c]){ if(d[s][c] + i.s < d[s][i.f]){ pq.erase({d[s][c], i.f}); pq.insert({d[s][i.f] = d[s][c] + i.s, i.f}); } } } } } ll ret = inf; if(k <= 3){ for(int i = 0; i < n; i++){ ll cur = 0; for(int j = 0; j < k; j++){ cur += d[a[j]][i]; } ret = min(ret, cur); } }else if(k == 4){ for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) for(int l = 0; l < (1 << k); l++){ ll cur = d[i][j]; for(int p = 0; p < k; p++){ cur += d[a[p]][((l >> p) & 1) ? i : j]; } ret = min(ret, cur); } }else{ s[0] = 1; for(int i = 1; i <= k; i++) s[i] = 3 * s[i - 1]; for(int i[3] = {0}; i[0] < n; i[0]++) for(i[1] = 0; i[1] < n; i[1]++) for(i[2] = 0; i[2] < n; i[2]++) for(int j = 0; j < s[k]; j++){ ll cur = inf; for(int l = 0; l < n; l++) cur = min(cur, d[i[0]][l] + d[i[1]][l] + d[i[2]][l]); for(int l = 0; l < k; l++){ cur += d[a[l]][i[j / s[l] % 3]]; } ret = min(ret, cur); } } 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...