Submission #693868

#TimeUsernameProblemLanguageResultExecution timeMemory
693868amirhoseinfar1385Cities (BOI16_cities)C++17
100 / 100
3618 ms52964 KiB
#include<bits/stdc++.h> using namespace std; long long n,m,q; const long long maxn=200000+5; vector<long long>allq; long long inf=1e16; vector<pair<long long,long long>>adj[maxn]; vector<vector<long long>>dis; void dij(long long u){ priority_queue<pair<long long,long long>>st; for(long long j=1;j<=n;j++){ st.push(make_pair(-dis[u][j],j)); } //cout<<"what "<<u<<endl; vector<long long>vis(n+1); while((long long)st.size()>0){ auto x=st.top(); st.pop(); if(vis[x.second]==1){ continue; } vis[x.second]=1; dis[u][x.second]=-x.first; for(auto y:adj[x.second]){ st.push(make_pair(-y.second+x.first,y.first)); } } } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>q>>m; allq.resize(q+1); dis.resize((1<<q),vector<long long>(n+1,inf)); for(long long i=0;i<q;i++){ cin>>allq[i]; } for(long long i=0;i<m;i++){ long long u,v,w; cin>>u>>v>>w; adj[u].push_back(make_pair(v,w)); adj[v].push_back(make_pair(u,w)); } for(long long i=1;i<=q;i++){ for(long long j=1;j<(1<<q);j++){ if(__builtin_popcount(j)!=i){ continue; } for(long long h=1;h<=n;h++){ for(long long z=j;z>0;z=(j&(z-1))){ if(z==j){ continue; } dis[j][h]=min(dis[j][h],dis[z][h]+dis[(j^z)][h]); } } if(i==1){ int w=0,fj=j; while(fj%2==0){ fj/=2; w++; } dis[j][allq[w]]=0; } //cout<<"salam"<<endl; dij(j); } } long long res=inf; for(long long i=1;i<=n;i++){ //cout<<i<<" "<<dis[(1<<q)-1][i]<<endl; res=min(res,dis[(1<<q)-1][i]); } cout<<res<<"\n"; }
#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...