Submission #1321231

#TimeUsernameProblemLanguageResultExecution timeMemory
1321231aryanVoting Cities (NOI22_votingcity)C++20
0 / 100
136 ms2268 KiB
#include<bits/stdc++.h> using namespace std; using i64 = long long; struct Data{ i64 w; int ma; int u; Data () {}; Data(int _u,int _ma,i64 _w){ u = _u; w = _w; ma = _ma; } bool operator<(const Data d) const{ return w > d.w; } }; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n,e,k; cin >> n >> e >> k; vector<int> good; for(int i = 0;i < k;i++){ int x; cin >> x; good.push_back(x); } vector<vector<pair<int,int>>> adj(n); for(int i = 0;i < e;i++){ int u,v,w; cin >> u >> v >> w; adj[v].push_back({u,w}); } const i64 inf = 1e18; int q; cin >> q; while(q --){ int s; cin >> s; vector<int> p(5); for(int i = 0;i < 5;i++){ cin >> p[i]; } vector<vector<i64>> dist(n,vector<i64>(1 << 5,inf)); priority_queue<Data,vector<Data>> pq; for(int &e : good){ for(int i = 0;i < (1 << 5);i++){ i64 cost = 0; bool ok = true; for(int j = 0;j < 5;j++){ if((1 << j) & i){ if(p[j] == -1) ok = false; cost += p[j]; } } if(ok) pq.push(Data(e,i,cost)); } } while(!pq.empty()){ int u = pq.top().u; i64 di = pq.top().w; int ma = pq.top().ma; pq.pop(); if(di > dist[u][ma]) continue; for(auto pp : adj[u]){ int v = pp.first; int w = pp.second; if(w + di < dist[v][ma]){ dist[v][ma] = w + di; pq.push(Data(v,ma,w + di)); } for(int j = 0;j < 5;j++){ if((1 << j) & ma){ // use ticket j i64 rw = w / 10; rw *= (10 - (j + 1)); if(rw + di < dist[v][ma ^ (1 << j)]){ dist[v][ma ^ (1 << j)] = rw + di; pq.push(Data(v,ma ^ (1 << j),rw + di)); } } } } } cout << (dist[s][0] == inf ? -1 : dist[s][0]) << '\n'; } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...