# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
84250 | Vinhspm | Cities (BOI16_cities) | C++14 | 6051 ms | 48740 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<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define FOR(a, b, c) for(int a = b; a <= c; ++a)
#define pb push_back
#define ll long long
const int N = 1e5 + 10;
const ll oo = 1e18;
typedef pair<int, int> ii;
typedef pair<ll, ii> pii;
int n, k, m;
int pos[N];
bool inqueue[N][(1 << 5)];
ll f[N][(1 << 5)], ans = oo;
vector<ii> vi[N];
void upd(ll &x, ll y) { x = min(x, y); }
void solve() {
FOR(i, 1, n) FOR(j, 0, (1 << k) - 1) f[i][j] = oo;
queue<ii> pq;
FOR(i, 1, n) {
int mask = 0; if(pos[i]) mask = (1 << (pos[i] - 1));
f[i][mask] = 0ll;
pq.push(ii(i, mask)); inqueue[i][mask] = true;
}
while(!pq.empty()) {
int u = pq.front().fi, mask = pq.front().se;
pq.pop(); inqueue[u][mask] = false;
if(mask == (1 << k) - 1) upd(ans, f[u][mask]);
if(ans <= f[u][mask]) continue;
//cout << u << ' ' << mask << '\n';
for(auto v: vi[u]) {
for(int t = 0; t < (1 << k); ++t) if(!(mask & t)) {
int nex = (mask | t);
if(f[u][mask] + 1ll * v.se + f[v.fi][t] >= ans) continue;
if(f[v.fi][nex] > f[u][mask] + 1ll * v.se + f[v.fi][t]) {
f[v.fi][nex] = f[u][mask] + 1ll * v.se + f[v.fi][t];
if(!inqueue[v.fi][nex]) {
pq.push(ii(v.fi, nex));
inqueue[v.fi][nex] = true;
}
}
}
}
}
}
signed main()
{
//freopen("test.inp", "r", stdin);
scanf("%d%d%d", &n, &k, &m);
FOR(i, 1, k) {
int x; scanf("%d", &x);
pos[x] = i;
}
FOR(i, 1, m) {
int u, v, c; scanf("%d%d%d", &u, &v, &c);
vi[u].pb(ii(v, c)); vi[v].pb(ii(u, c));
}
solve();
printf("%lld", ans);
}
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... |