Submission #1222566

#TimeUsernameProblemLanguageResultExecution timeMemory
1222566minhpkCities (BOI16_cities)C++20
52 / 100
6095 ms120988 KiB
#include <bits/stdc++.h> #define int long long using namespace std; int a,b,c; int t[10000]; vector <pair<int,int>> z[1000005]; int cnt[100005][27]; int bruh=1e18; struct node{ int val,x,mask; }; void dijkstra(){ for (int i=1;i<=a;i++){ for (int j=0;j<(1<<b);j++){ cnt[i][j]=bruh; } } for (int i=0;i<b;i++){ cnt[t[i]][1<<i]=0; } for (int mask=0;mask<1<<b;mask++){ priority_queue<pair<int,int> ,vector<pair<int,int>> ,greater<pair<int,int>>> q; for (int i=1;i<=a;i++){ for (int submask=mask;submask>0;submask=(submask-1)&mask){ cnt[i][mask]=min(cnt[i][mask],cnt[i][submask]+cnt[i][mask^submask]); if (cnt[i][mask]!=bruh){ q.push({cnt[i][mask],i}); } } } while (q.size()){ pair<int,int> pos=q.top(); q.pop(); int val=pos.first; int pos1=pos.second; if (val>cnt[pos1][mask]){ continue; } for (auto p:z[pos1]){ if (cnt[p.first][mask]>val+p.second){ cnt[p.first][mask]=val+p.second; q.push({cnt[p.first][mask],p.first}); } } } } int res=bruh; for (int i=1;i<=a;i++){ res=min(res,cnt[i][(1<<b) -1]); } cout << res << "\n"; } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> a >> b >> c; for (int i=0;i<b;i++){ cin >> t[i]; } for (int i=1;i<=c;i++){ int x,y,t; cin >> x >> y >> t; z[x].push_back({y,t}); z[y].push_back({x,t}); } dijkstra(); 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...