Submission #648458

#TimeUsernameProblemLanguageResultExecution timeMemory
648458ymmCities (BOI16_cities)C++17
100 / 100
2105 ms47620 KiB
#include <bits/stdc++.h> #define Loop(x,l,r) for (ll x = (l); x < (ll)(r); ++x) #define LoopR(x,l,r) for (ll x = (r)-1; x >= (ll)(l); --x) typedef long long ll; typedef std::pair<int, int> pii; typedef std::pair<ll , ll > pll; using namespace std; const int N = 100'010; const ll inf = 1e17; const int K = 5; ll dis[1<<K][N]; vector<pll> A[N]; int imp[K]; int n, k, m; void dij(int msk) { priority_queue<pll, vector<pll>, greater<pll>> s; int fi = __builtin_ctz(msk); Loop (v,0,n) { int submsk = msk; int cnt = __builtin_popcount(msk); Loop (_,0,1<<cnt) { dis[msk][v] = min( dis[submsk][v] + dis[submsk ^ msk][v], dis[msk][v]); submsk = (submsk - 1) & msk; } s.push({dis[msk][v], v}); } while (s.size()) { auto [d, v] = s.top(); s.pop(); if (d > dis[msk][v]) continue; for (auto [u, w] : A[v]) { if (d + w < dis[msk][u]) { dis[msk][u] = d + w; s.push({dis[msk][u], u}); } } } } int main() { cin.tie(0) -> sync_with_stdio(false); cin >> n >> k >> m; Loop (i,0,k) { cin >> imp[i]; --imp[i]; } Loop (i,0,m) { ll v, u, w; cin >> v >> u >> w; --v; --u; A[v].push_back({u, w}); A[u].push_back({v, w}); } Loop (msk,1,1<<k) Loop (v,0,n) dis[msk][v] = inf; Loop (i,0,k) dis[1<<i][imp[i]] = 0; Loop (msk,1,1<<k) dij(msk); ll ans = inf; Loop (v,0,n) ans = min(ans, dis[(1<<k)-1][v]); cout << ans << '\n'; }

Compilation message (stderr)

cities.cpp: In function 'void dij(int)':
cities.cpp:20:6: warning: unused variable 'fi' [-Wunused-variable]
   20 |  int fi = __builtin_ctz(msk);
      |      ^~
#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...