Submission #1245829

#TimeUsernameProblemLanguageResultExecution timeMemory
1245829orzngaihaCities (BOI16_cities)C++20
0 / 100
276 ms30936 KiB
#include<bits/stdc++.h> using namespace std; using pii = pair<int,int>; const int N = 2e5+5,LOG = 50; int n,m,k,dp[N][LOG],a[N]; vector<pii> adj[N]; int main() { cin>>n>>k>>m; for(int i = 0;i <= n;i++) { for(int j = 0;j < (1<<k);j++) dp[i][j] = 1e9; } for(int i = 1;i <= k;i++) { cin>>a[i]; dp[a[i]][1<<(i-1)] = 0; //pq.push({0,a[i],1<<i}); } for(int i = 1;i <= m;i++) { int x,y,z; cin>>x>>y>>z; adj[x].push_back({y,z}); adj[y].push_back({x,z}); } // while(!pq.empty()) for (int mask = 0; mask < (1 << k); mask++) { for (int submask = mask; submask; submask = (submask - 1) & mask) { if (submask == mask) continue; int o = mask ^ submask; for (int u = 1; u <= n; u++) { dp[u][mask] = min(dp[u][mask], dp[u][submask] + dp[u][o]); } } priority_queue<pii, vector<pii>, greater<pii>> pq; for (int u = 1; u <= n; u++) { if (dp[u][mask] < 1e9) pq.emplace(dp[u][mask], u); } while (!pq.empty()) { auto [cost, u] = pq.top(); pq.pop(); if (dp[u][mask] != cost) continue; for (auto [v, w] : adj[u]) { if (dp[v][mask] > dp[u][mask] + w) { dp[v][mask] = dp[u][mask] + w; pq.emplace(dp[v][mask], v); } } } } int ans = 1e9; for(int i = 1;i <= n;i++) { ans = min(ans,dp[i][(1<<k)-1]); } cout<<ans; }
#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...