Submission #1158572

#TimeUsernameProblemLanguageResultExecution timeMemory
1158572dostsCities (BOI16_cities)C++20
100 / 100
1363 ms42156 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2") using namespace std; #define int long long #define pii pair<int,int> #define ff first #define ss second #define sp << " " << #define all(cont) cont.begin(),cont.end() #define vi vector<int> const int inf = 2e18,N = 1e6+1,MOD = 1e9+7; void solve() { int n,k,m; cin >> n >> k >> m; int lim = (1<<k); int dp[n+1][lim]; for (int i = 0;i<=n;i++) for (int j = 0;j<lim;j++) dp[i][j] = inf; for (int i = 0;i<=n;i++) dp[i][0] = 0; for (int i = 0;i<k;i++) { int x; cin >> x; dp[x][(1<<i)] = 0; } priority_queue<pii,vector<pii>,greater<pii>> pq; vector<pii> edges[n+1]; for (int i=1;i<=m;i++) { int a,b,c; cin >> a >> b >> c; edges[a].push_back({b,c}); edges[b].push_back({a,c}); } for (int i = 0;i<lim;i++) { for (int j = 1;j<=n;j++) { for (int s = i;s > 0;s = (s-1)&i) { dp[j][i] = min(dp[j][i],dp[j][s]+dp[j][i^s]); } if (dp[j][i] != inf) pq.push({dp[j][i],j}); } while (!pq.empty()) { auto[c,city] = pq.top(); pq.pop(); if (c != dp[city][i]) continue; for (auto it : edges[city]) { if (dp[it.ff][i] > c+it.ss) { dp[it.ff][i] = c+it.ss; pq.push({c+it.ss,it.ff}); } } } } int ans = inf; for (int i=1;i<=n;i++) ans = min(ans,dp[i][lim-1]); if (ans >= inf) cout << -1 << '\n'; else cout << ans << '\n'; } int32_t main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #ifdef Dodi freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t = 1; //cin >> t; while (t --> 0) solve(); }
#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...