This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;
#define fi first
#define se second
#define mp make_pair
#define fastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int N = (int)1e5 + 100;
const int K = 5;
const ll inf = (ll)1e18;
vector<pii> T[N];
ll dist[N][1 << K];
struct state{
ll dis;
int node;
int mask;
bool operator<(const state &q) const {
return dis > q.dis;
}
};
bool use[N][1 << K];
int main(){
fastIO;
int n, k, m;
cin >> n >> k >> m;
vector<int> q(k);
for(int i =0 ; i < k ; i ++ ){
cin >> q[i];
}
int u, v;
ll w;
for(int i = 0 ; i < m ; i ++ ){
cin >> u >> v >> w;
T[u].push_back(mp(v, w));
T[v].push_back(mp(u, w));
}
for(int i = 1; i <= n; i ++) {
for(int j = 1; j < (1 << k); j ++ ){
dist[i][j] = inf;
}
}
for(int j = 0 ; j < k ; j ++ ){
dist[q[j]][(1<<j)]=0;
}
int node;
ll dd;
for(int ms = 1 ; ms < (1 << k) ; ms ++ ){
for(int c = 0 ; c <= ms ; c ++ ){
if(ms & c){
for(int i = 1 ; i <= n; i ++ ){
dist[i][ms] = min(dist[i][ms], dist[i][c]+dist[i][(ms^c)]);
}
}
}
priority_queue<pii,vector<pii>,greater<pii>> pq;
for(int i = 1; i <= n; i ++ ){
if(dist[i][ms] == inf) continue;
pq.push(mp(dist[i][ms], i));
}
while(!pq.empty()){
node = pq.top().se;
dd = pq.top().fi;
pq.pop();
if(use[node][ms]) continue;
use[node][ms]=true;
for(auto x : T[node]){
if(dist[x.fi][ms] > dist[node][ms] + x.se){
dist[x.fi][ms] = dist[node][ms] + x.se;
pq.push(mp(dist[x.fi][ms],x.fi));
}
}
}
}
ll outp = inf;
for(int i = 1; i <= n; i ++ )
outp = min(outp, dist[i][(1<<k)-1]);
cout << outp << "\n";
return 0;
}
Compilation message (stderr)
cities.cpp: In function 'int main()':
cities.cpp:56:8: warning: variable 'dd' set but not used [-Wunused-but-set-variable]
56 | ll dd;
| ^~
# | 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... |