# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
96231 | ics0503 | Cities (BOI16_cities) | C++14 | 6102 ms | 39904 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |