Submission #1245771

#TimeUsernameProblemLanguageResultExecution timeMemory
1245771bncodero_o123Cities (BOI16_cities)C++20
100 / 100
1519 ms39724 KiB
#include <bits/stdc++.h> #define pii pair<int, int> #define ll long long #define name "code" using namespace std; const int max_n= 1e5; int n, m, k, a[max_n + 2]; vector<pii> adj[max_n + 2]; const ll inf= 1e16; ll dp[35][max_n + 2]; void upd(int mask) { priority_queue<pair<ll, int>> pq; for(int i= 1; i <= n; ++i) if(dp[mask][i] != inf) pq.push(make_pair(-dp[mask][i], i)); while(pq.size()) { auto [dis, u]= pq.top(); pq.pop(); dis= -dis; if(dis != dp[mask][u]) continue; for(auto [v, w] : adj[u]) if(dp[mask][v] > dp[mask][u] + w) { dp[mask][v]= dp[mask][u] + w; pq.push(make_pair(-dp[mask][v], v)); } } } void solve() { cin >> n >> k >> m; for(int i= 0; i < k; ++i) cin >> a[i]; for(int i= 0; i < m; ++i) { int u, v, w; cin >> u >> v >> w; adj[u].push_back(make_pair(v, w)); adj[v].push_back(make_pair(u, w)); } for(int i= 1; i < (1 << k); ++i) for(int j= 1; j <= n; ++j) dp[i][j]= inf; for(int i= 0; i < k; ++i) dp[1 << i][a[i]]= 0; for(int mask= 1; mask < (1 << k); ++mask) { for(int i= 1; i <= n; ++i) for(int sub= mask - 1; sub > 0; sub= (sub - 1) & mask) dp[mask][i]= min(dp[mask][i], dp[sub][i] + dp[mask ^ sub][i]); upd(mask); } ll ans= inf; for(int i= 1; i <= n; ++i) ans= min(ans, dp[(1 << k) - 1][i]); cout << ans << '\n'; } int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); if(fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); } int T= 1; for(; T; --T) solve(); return 0; }

Compilation message (stderr)

cities.cpp: In function 'int main()':
cities.cpp:62:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   62 |         freopen(name".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
cities.cpp:63:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   63 |         freopen(name".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...