Submission #1147380

#TimeUsernameProblemLanguageResultExecution timeMemory
1147380PacybwoahVoting Cities (NOI22_votingcity)C++20
100 / 100
60 ms6492 KiB
#include<iostream> #include<vector> #include<queue> #include<algorithm> using namespace std; typedef long long ll; ll inf = 1e18; int main(){ ios::sync_with_stdio(false); cin.tie(0); int n, m, k; cin >> n >> m >> k; vector<vector<pair<int, ll>>> graph(n); vector<int> imp; for(int i = 0; i < k; i++){ int tmp; cin >> tmp; imp.push_back(tmp); } for(int i = 0; i < m; i++){ int a, b, w; cin >> a >> b >> w; graph[b].emplace_back(a, w); } vector<vector<ll>> dist(n, vector<ll>(32, inf)); priority_queue<pair<ll, pair<int, int>>, vector<pair<ll, pair<int, int>>>, greater<pair<ll, pair<int, int>>>> pq; for(auto &x: imp){ dist[x][0] = 0; pq.push(make_pair(0, make_pair(x, 0))); } while(!pq.empty()){ auto [d, info] = pq.top(); pq.pop(); auto &[node, used] = info; //cout << d << " " << node << " " << used << "\n"; if(d > dist[node][used]) continue; for(auto &[x, l]: graph[node]){ for(int i = 0; i < 5; i++){ if(used & (1 << i)) continue; if(d + l * (10 - i - 1) / 10 < dist[x][used + (1 << i)]){ dist[x][used + (1 << i)] = d + l * (10 - i - 1) / 10; pq.push(make_pair(dist[x][used + (1 << i)], make_pair(x, used + (1 << i)))); } } if(d + l < dist[x][used]){ dist[x][used] = d + l; pq.push(make_pair(dist[x][used], make_pair(x, used))); } } } int q; cin >> q; while(q--){ int node; vector<ll> p(5); cin >> node; for(int i = 0; i < 5; i++) cin >> p[i]; ll ans = inf; for(int i = 0; i < 32; i++){ ll sum = 0; bool flag = 0; for(int j = 0; j < 5; j++) if(i & (1 << j)) sum += p[j]; for(int j = 0; j < 5; j++) if(i & (1 << j)) if(p[j] == -1) flag = 1; if(flag) continue; if(sum + dist[node][i] < ans) ans = sum + dist[node][i]; } if(ans == inf) cout << "-1\n"; else cout << ans << "\n"; } } // g++ -std=c++20 -Wall -Wextra -Wshadow -fsanitize=undefined -fsanitize=address -o run pA.cpp
#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...