Submission #96231

#TimeUsernameProblemLanguageResultExecution timeMemory
96231ics0503Cities (BOI16_cities)C++14
37 / 100
6102 ms39904 KiB
#include<stdio.h> #include<algorithm> #include<vector> #include<queue> using namespace std; struct xy { long long x, y; bool operator<(const xy p)const { return x < p.x; } }; vector<xy>edge[121212]; priority_queue<xy>H; long long D[1 << 5][121212], L[6]; int main() { long long n, m, k; scanf("%lld%lld%lld", &n, &k, &m); long long i, j; for (i = 0; i < k; i++)scanf("%lld", &L[i]); for (i = 0; i < m; i++) { long long s, e, w; scanf("%lld%lld%lld", &s, &e, &w); edge[s].push_back({ e,w }); edge[e].push_back({ s,w }); } long long inf = 1e18; for (i = 0; i < (1 << k); i++)for (j = 1; j <= n; j++)D[i][j] = inf; for (i = 0; i < k; i++)D[(1 << i)][L[i]] = 0; for (i = 1; i < (1 << k); i++) { for (j = 1; j <= n; j++) for (long long p = 0; p < i; p++) if ((i | p) == i)D[i][j] = min(D[i][j], D[p][j]+D[i^p][j]); for (j = 1; j <= n; j++) if (D[i][j]<inf)H.push({ D[i][j],j }); while (!H.empty()) { xy now = H.top(); H.pop(); if (now.x != D[i][now.y])continue; for (j = 0; j < edge[now.y].size(); j++) { long long nxt = edge[now.y][j].x, w = edge[now.y][j].y; if (D[i][nxt] > D[i][now.y] + w) { D[i][nxt] = D[i][now.y] + w; H.push({ D[i][nxt], nxt }); } } } } long long ans = inf; for (i = 1; i <= n; i++)ans = min(ans, D[(1 << k) - 1][i]); printf("%lld", ans); return 0; }

Compilation message (stderr)

cities.cpp: In function 'int main()':
cities.cpp:33:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for (j = 0; j < edge[now.y].size(); j++) {
                ~~^~~~~~~~~~~~~~~~~~~~
cities.cpp:16:26: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  long long n, m, k; scanf("%lld%lld%lld", &n, &k, &m);
                     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
cities.cpp:18:30: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for (i = 0; i < k; i++)scanf("%lld", &L[i]);
                         ~~~~~^~~~~~~~~~~~~~~
cities.cpp:20:27: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   long long s, e, w; scanf("%lld%lld%lld", &s, &e, &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...