Submission #1273002

#TimeUsernameProblemLanguageResultExecution timeMemory
1273002ken7236Voting Cities (NOI22_votingcity)C++20
100 / 100
73 ms8352 KiB
#include <bits/stdc++.h> using namespace std; #define int long long signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, e, k; cin>>n>>e>>k; vector<int> v(k); for(int a=0; a<k; a++) { cin>>v[a]; } vector<vector<pair<int, int> > > g(n+1); for(int a = 0; a<e; a++) { int u,v,c; cin>>u>>v>>c; g[v].push_back({u, c}); } int dis[5005][32]; for(int a=0; a<n; a++) for(int m=0; m<32; m++) dis[a][m] = LONG_LONG_MAX; priority_queue<pair<int, pair<int, int> > > pq; for(int a=0; a<k; a++) { dis[v[a]][0] = 0; pq.push({0, {v[a], 0}}); } while(!pq.empty()) { int d = - pq.top().first; int u = pq.top().second.first; int mask = pq.top().second.second; pq.pop(); if(d != dis[u][mask]) continue; for(int a=0; a<g[u].size(); a++) { int v = g[u][a].first; int w = g[u][a].second; int nd = d + w; if(nd < dis[v][mask]) { dis[v][mask] = nd; pq.push({- nd, {v, mask}}); } for(int t=0; t<5; t++) { if(mask & (1<<t)) continue; int nmask = mask | (1 << t); int nd2 = d + (w * (9-t)) / 10; if(nd2 < dis[v][nmask]) { dis[v][nmask] = nd2; pq.push({ - nd2, {v, nmask}}); } } } } int q; cin>>q; while(q--) { int s; int p[5]; cin>>s; int av = 0; for(int a=0; a<5; a++) { cin>>p[a]; if(p[a] != -1) av |= (1<<a); } int ans = LONG_LONG_MAX; for(int m = 0; m < 32; m++) { if((m & ~av) != 0) continue; int base = dis[s][m]; if(base >= LONG_LONG_MAX) continue; int sum = 0; for(int t= 0; t<5; t++) { if(m &(1<<t)) sum += p[t]; } ans = min(ans, base + sum); } if(ans >= LONG_LONG_MAX) cout<<"-1\n"; else cout<<ans<<endl; } }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...