Submission #1309035

#TimeUsernameProblemLanguageResultExecution timeMemory
1309035ninstroyerVoting Cities (NOI22_votingcity)C++20
30 / 100
1097 ms57388 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long const ll nx = 5e3+5, inf = 4e18; ll n,e,k,q,t[nx],p[6],dist[nx][1<<5][1<<5]; vector<pair<ll,ll>> adj[nx]; priority_queue<tuple<ll,ll,ll,ll>, vector<tuple<ll,ll,ll,ll>>, greater<tuple<ll,ll,ll,ll>>> pq; ll Dijkstra(ll p[]) { for(int i = 0; i < n; i++) for(int j = 0; j < 32; j++) for(int k = 0; k < 32; k++) dist[i][j][k] = inf; while(!pq.empty()) pq.pop(); int start = p[0]; if(start < 0) return -1; for(int i = 0; i < (1<<5); i++) { ll cost = 0; bool valid = true; for(int j = 0; j < 5; j++) { if(i & (1<<j)) cost += p[j+1]; else continue; if(p[j+1] == -1) valid = false; } dist[start][i][0] = cost; if(valid) pq.push({cost, start, i, 0}); } while(!pq.empty()) { auto [d, u, state, cur] = pq.top(); pq.pop(); if(d > dist[u][state][cur]) continue; for(auto [v, w] : adj[u]) { if(w != inf && d + w < dist[v][state][cur]) { dist[v][state][cur] = d+w; pq.push({dist[v][state][cur], v, state, cur}); } for(int i = 1; i <= 5; i++) { if(!(1<<(i-1) & state) || (1<<(i-1) & cur)) continue; ll nw = cur | (1<<(i-1)); if(w != inf && d + w*(10-i)/10 < dist[v][state][nw]) { dist[v][state][nw] = d + w*(10-i)/10; pq.push({dist[v][state][nw], v, state, nw}); } } } } ll res = inf; for(int i = 0; i < (1<<5); i++) { for(int j = 0; j < k; j++) { res = min(res, dist[t[j]][i][i]); } } return (res == inf ? -1 : res); } int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>e>>k; for(int i = 0; i < k; i++) cin>>t[i]; for(int i = 0; i < e; i++) { ll u,v,w; cin>>u>>v>>w; adj[u].push_back({v,w}); } cin>>q; for(int i = 0; i < q; i++) { cin>>p[0]>>p[1]>>p[2]>>p[3]>>p[4]>>p[5]; cout<<Dijkstra(p)<<"\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...