Submission #1075357

#TimeUsernameProblemLanguageResultExecution timeMemory
1075357vjudge1Cities (BOI16_cities)C++14
100 / 100
2056 ms52164 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define endl '\n' signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n,k,m; cin >> n >> k >> m; vector<vector<pair<int,int>>> graph(n+1); int DP[n+1][1<<k]; bool vis[n+1][1<<k]; memset(vis,false,sizeof(vis)); vector<int> impo(k); for(int i=0;i<k;i++){ cin >> impo[i]; } for(int i=0;i<m;i++){ int a,b,c; cin >> a >> b >> c; graph[a].push_back({b,c}); graph[b].push_back({a,c}); } for(int mask=1;mask<(1<<k);mask++){ priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> pq; if(!(mask&(mask-1))){ for(int u=1;u<=n;u++){ DP[u][mask]=1e18; } for(int i=0;i<k;i++){ if(mask&(1<<i)){ DP[impo[i]][mask]=0; pq.push({0,impo[i]}); } } } else{ for(int u=1;u<=n;u++){ DP[u][mask]=1e18; for(int s=((mask-1)&mask);s;s=((s-1)&mask)){ DP[u][mask]=min(DP[u][mask],DP[u][s]+DP[u][mask^s]); } pq.push({DP[u][mask],u}); } } while(!pq.empty()){ int u=pq.top().second,weight=pq.top().first; pq.pop(); if(weight>DP[u][mask]||vis[u][mask]){ continue; } vis[u][mask]=true; for(pair<int,int> x:graph[u]){ int v=x.first; int dist=DP[u][mask]+x.second; if(dist<DP[v][mask]){ DP[v][mask]=dist; pq.push({dist,v}); } } } } /*for(int mask=1;mask<(1<<k);mask++){ cout << mask << ": " << endl; for(int u=1;u<=n;u++){ cout << DP[u][mask] << ' '; } cout << endl; }*/ int ans=1e18; for(int u=1;u<=n;u++){ ans=min(ans,DP[u][(1<<k)-1]); } cout << ans; }
#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...