Submission #96939

#TimeUsernameProblemLanguageResultExecution timeMemory
96939KastandaCities (BOI16_cities)C++11
37 / 100
6099 ms34836 KiB
#include<bits/stdc++.h> using namespace std; const int N = 100005, K = 5; int n, m, k, A[K]; bool M[N]; long long dp[1 << K][N]; vector < pair < int , int > > Adj[N]; int main() { scanf("%d%d%d", &n, &k, &m); memset(dp, 63, sizeof(dp)); for (int i = 0; i < k; i++) scanf("%d", &A[i]), dp[1 << i][A[i]] = 0; for (int i = 1; i <= m; i++) { int v, u, w; scanf("%d%d%d", &v, &u, &w); Adj[v].push_back({u, w}); Adj[u].push_back({v, w}); } for (int mask = 1; mask < (1 << k); mask ++) { if (__builtin_popcount(mask) > 1) for (int v = 1; v <= n; v ++) for (int sub = mask; sub; sub = (sub - 1) & mask) if (sub && (sub ^ mask)) for (auto &u : Adj[v]) if (dp[mask][v] > dp[sub][v] + dp[mask ^ sub][u.first] + u.second) dp[mask][v] = dp[sub][v] + dp[mask ^ sub][u.first] + u.second; queue < int > Pq; memset(M, 0, sizeof(M)); for (int v = 1; v <= n; v ++) Pq.push(v); while (Pq.size()) { int v = Pq.front(); M[v] = 0; Pq.pop(); for (auto &u : Adj[v]) if (dp[mask][u.first] > dp[mask][v] + u.second) { dp[mask][u.first] = dp[mask][v] + u.second; if (!M[u.first]) M[u.first] = 1, Pq.push(u.first); } } } return !printf("%lld\n", dp[(1 << k) - 1][A[0]]); }

Compilation message (stderr)

cities.cpp: In function 'int main()':
cities.cpp:10:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d%d", &n, &k, &m);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~
cities.cpp:13:27: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d", &A[i]), dp[1 << i][A[i]] = 0;
         ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
cities.cpp:17:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d%d", &v, &u, &w);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~
#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...