Submission #647336

#TimeUsernameProblemLanguageResultExecution timeMemory
647336fatemetmhrCities (BOI16_cities)C++17
100 / 100
2259 ms38100 KiB
// ~ Be Name Khoda ~ // #include<bits/stdc++.h> using namespace std; typedef long long ll; #define pb push_back #define mp make_pair #define all(x) x.begin(), x.end() #define fi first #define se second const int maxn = 1e6 + 10; const int maxn5 = 1e5 + 10; const int maxnt = 1.2e6 + 10; const int maxn3 = 1e3 + 10; const int mod = 1e9 + 7; const ll inf = 1e18; vector <pair<int, int>> adj[maxn5]; ll dp[(1 << 5) + 1][maxn5]; int imp[maxn5], cmpmask, n; priority_queue <pair<ll, int>> av; inline void dij(int mask){ while(av.size()) av.pop(); for(int i = 0; i < n; i++) av.push({-dp[mask][i], i}); while(av.size()){ while(av.size() && dp[mask][av.top().se] != av.top().fi * -1) av.pop(); if(av.empty()) return; int v = av.top().se; av.pop(); for(auto [u, w] : adj[v]) if(dp[mask][u] > dp[mask][v] + w){ dp[mask][u] = dp[mask][v] + w; av.push({-dp[mask][u], u}); } } return; } int main() { ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); int k, m; cin >> n >> k >> m; for(int i = 0; i < k; i++){ cin >> imp[i]; imp[i]--; } for(int i = 0; i < m; i++){ int a, b, c; cin >> a >> b >> c; a--; b--; if(a == b) continue; adj[a].pb({b, c}); adj[b].pb({a, c}); } for(int mask = 0; mask < (1 << k); mask++) for(int i = 0; i < n; i++) dp[mask][i] = inf; for(int i = 0; i < n; i++) dp[0][i] = 0; for(int i = 0; i < k; i++){ dp[1 << i][imp[i]] = 0; for(auto [u, w] : adj[imp[i]]) dp[1 << i][u] = min(dp[1 << i][u], ll(w)); } for(int mask = 0; mask < (1 << k); mask++){ dij(mask); for(int v = 0; v < n; v++){ int nmask = (1 << k) - 1 - mask; for(int sub = nmask; sub; sub = (sub - 1) & nmask){ dp[mask^sub][v] = min(dp[mask^sub][v], dp[mask][v] + dp[sub][v]); } } } ll ans = inf; for(int i = 0; i < n; i++) ans = min(ans, dp[(1 << k) - 1][i]); cout << ans << endl; } /* 8 3 9 2 8 7 2 4 3 2 6 9 3 7 2 4 6 5 5 8 1 6 8 2 1 2 5 1 3 3 4 5 2 */
#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...