Submission #917416

#TimeUsernameProblemLanguageResultExecution timeMemory
917416arashMLGCities (BOI16_cities)C++17
100 / 100
2275 ms48584 KiB
#include<bits/stdc++.h> #ifdef LOCAL #include "Essentials/algo/debug.h" #else #define debug(...) 69 #endif using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; const int N = 1e5 + 23; const int LOG = 5; const ll inf = 1e18; #define F first #define S second #define pb push_back #define kill(x) cout<<x<<endl, exit(0); #define all(x) x.begin(),x.end() #define sz(x) (int)x.size() #define lc (v << 1) #define rc ((v<<1) |1) #define int ll int n,m,k; vector<pll> G[N]; int dist[1<<LOG][N]; priority_queue<pll,vector<pll> , greater<pll> > pq; bool mark[N]; void dijk(int mask) { for(int i = 1; i <= n ; i++) pq.push({dist[mask][i],i}); fill(mark,mark+N,0); while(sz(pq)) { int v = pq.top().S; pq.pop(); if(mark[v]) continue; mark[v] = true; for(auto [u,w] : G[v]) if(!mark[u]) { dist[mask][u] = min(dist[mask][u],dist[mask][v] + w); pq.push({dist[mask][u],u}); } } } void setdist(int mask) { for(int sub = 1; sub < mask; sub ++) if((sub&mask) == sub) { int sub2 = mask^sub; for(int i = 1; i <= n; i ++) { dist[mask][i] = min(dist[mask][i],dist[sub][i] + dist[sub2][i]); } } } int32_t main() { cin.tie(nullptr)->sync_with_stdio(false); for(int i = 0 ; i < (1<<LOG); i ++) for(int j = 0; j < N ; j ++) dist[i][j] = inf; cin>>n>>k>>m; for(int i = 0 ;i < k; i ++) { int x; cin>>x; dist[1<<i][x] = 0; } for(int i = 0 ; i < m ; i++) { int v,u,w; cin>>v>>u>>w; G[v].pb({u,w}); G[u].pb({v,w}); } for(int mask = 1 ; mask < (1 << k) ; mask ++) { setdist(mask); dijk(mask); } cout<< *min_element(dist[(1<<k)-1],dist[(1<<k)-1] + N); return 0; } // Jumpsuit, Jumpsuit cover me! // Jumpsuit, Jumpsuit cover me!
#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...