Submission #1273066

#TimeUsernameProblemLanguageResultExecution timeMemory
1273066ezrapoVoting Cities (NOI22_votingcity)C++20
100 / 100
400 ms38396 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int INF=(1LL<<60); int32_t main() { ios::sync_with_stdio(0); cin.tie(0); int n, e, k; cin >> n >> e >> k; vector<int> voting(k); for (int i=0; i<k; i++) cin >> voting[i]; vector<vector<pair<int, int>>> revG(32*n); for (int i=0; i<e; i++) { int u, v, c; cin >> u >> v >> c; for (int msk=0; msk<32; msk++) { int from=msk*n+v; revG[from].push_back({msk*n+u, c}); for (int t=0; t<5; t++) { if (msk&(1<<t)) { int prev=msk^(1<<t); revG[from].push_back({prev*n+u, c*(10-t-1)/10}); } } } } int q; cin >> q; vector<vector<int>> dist_msk(32, vector<int>(n, INF)); for (int msk=0; msk<32; msk++) { vector<int> dist(32*n, INF); priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; for (int vc : voting) dist[msk*n+vc]=0, pq.push({0, msk*n+vc}); while (!pq.empty()) { auto[d, node]=pq.top(); pq.pop(); if (d!=dist[node]) continue; for (auto[child, d2] : revG[node]) { if (d+d2<dist[child]) { dist[child]=d+d2; pq.push({dist[child], child}); } } } for (int c=0; c<n; c++) dist_msk[msk][c]=dist[c]; } while (q--) { int s; vector<int> p(5); cin >> s >> p[0] >> p[1] >> p[2] >> p[3] >> p[4]; int ans=INF; for (int msk=0; msk<32; msk++) { bool ok=true; int tc=0; for (int t=0; t<5; t++) { if (msk&(1<<t)) { if (p[t]==-1) {ok=false; break;} tc+=p[t]; } } if (!ok) continue; int toll=dist_msk[msk][s]; if (toll>=INF) continue; ans=min(ans, toll+tc); } cout << (ans>=INF?-1:ans) << "\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...