Submission #253521

#TimeUsernameProblemLanguageResultExecution timeMemory
253521kshitij_sodaniCities (BOI16_cities)C++14
0 / 100
6066 ms19604 KiB
#include <bits/stdc++.h> using namespace std; typedef long long llo; #define mp make_pair #define pb push_back #define a first #define b second llo n,k,m; vector<pair<llo,llo>> adj[100001]; llo dist[1000001]; llo back[1000001]; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin>>n>>k>>m; llo ans=0; vector<llo> dd; for(llo i=0;i<k;i++){ llo aa; cin>>aa; aa--; dd.pb(aa); } for(llo i=0;i<m;i++){ llo aa,bb,cc; cin>>aa>>bb>>cc; aa--; bb--; adj[aa].pb({bb,cc}); adj[bb].pb({aa,cc}); ans+=cc; } while(true){ vector<llo> cur; cur.pb(dd[0]); llo co=0; for(llo i=1;i<k;i++){ for(llo j=0;j<n;j++){ dist[j]=-1; back[j]=-1; } priority_queue<pair<llo,llo>> ss; for(auto j:cur){ dist[j]=0; ss.push({0,j}); } while(ss.size()){ pair<llo,llo> no=ss.top(); ss.pop(); for(auto j:adj[no.b]){ if(dist[j.a]==-1 or dist[j.a]>dist[no.b]+j.b){ dist[j.a]=dist[no.b]+j.b; back[j.a]=no.b; ss.push({-dist[j.a],j.a}); } } } llo cur2=dd[i]; co+=dist[dd[i]]; while(back[cur2]!=-1){ cur.pb(cur2); cur2=back[cur2]; } } ans=min(ans,co); if(next_permutation(dd.begin(),dd.end())){ continue; } break; } cout<<ans<<endl; return 0; }
#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...