Submission #1177565

#TimeUsernameProblemLanguageResultExecution timeMemory
1177565VMaksimoski008Voting Cities (NOI22_votingcity)C++20
0 / 100
188 ms2552 KiB
#include <bits/stdc++.h> #define ar array using namespace std; using ll = long long; signed main() { int n, m, k; cin >> n >> m >> k; vector<int> imp(k); for(int i=0; i<k; i++) cin >> imp[i]; vector<pair<int, int> > G[n+1]; while(m--) { int a, b, w; cin >> a >> b >> w; G[a].push_back({ b, w }); G[b].push_back({ a, w }); } int q; cin >> q; ll D[n+1][1<<5]; vector<int> p(5); priority_queue<ar<ll, 3>, vector<ar<ll, 3> >, greater<> > pq; while(q--) { int s; cin >> s; for(int i=0; i<5; i++) cin >> p[i]; for(int i=0; i<n; i++) for(int j=0; j<(1<<5); j++) D[i][j] = 1e18; for(int x : imp) pq.push({ D[x][(1<<5)-1] = 0, x, (1<<5)-1 }); while(!pq.empty()) { auto [d, u, mask] = pq.top(); pq.pop(); if(d != D[u][mask]) continue; for(auto [v, w] : G[u]) { if(D[v][mask] > d + w) pq.push({ D[v][mask] = d + w, v, mask }); for(int i=0; i<5; i++) { if(p[i] == -1) continue; if(mask & (1 << i)) { int nm = mask ^ (1 << i); ll nd = d + w - (w / 10) * (i+1) + p[i]; if(D[v][nm] > nd) { pq.push({ D[v][nm] = nd, v, nm }); } } } } } ll ans = 1e18; for(int i=0; i<(1<<5); i++) ans = min(ans, D[s][i]); cout << (ans == 1e18 ? -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...