Submission #1272707

#TimeUsernameProblemLanguageResultExecution timeMemory
1272707huhuhuhuhuVoting Cities (NOI22_votingcity)C++20
100 / 100
330 ms15260 KiB
#include <bits/stdc++.h> using namespace std; #define pll pair<long long, long long> template <int t> using arr = array<long long, t>; long long n, e, s; vector<long long> cities; vector<pll> rel[20005]; long long dist[5005][50]; long long q; int main() { cin >> n >> e >> s; for (int i = 0; i <= n; i++) { for (int j = 0; j < 32; j++) { dist[i][j] = 1e16; } } for (int i = 0; i < s; i++) { long long v; cin >> v; cities.push_back(v); } for (int i = 0; i < e; i++) { long long u, v, p; cin >> u >> v >> p; rel[v].push_back({u, p}); } priority_queue<arr<3>, vector<arr<3>>, greater<arr<3>>> pq; for (auto &x : cities) { pq.push({0, x, 0}); } while (!pq.empty()) { auto [price, pos, data] = pq.top(); pq.pop(); if (dist[pos][data] <= price) { continue; } // printf("ok %lld %lld %lld\n", pos, data, price); dist[pos][data] = price; for (auto &next : rel[pos]) { auto [nextPos, nextPrice] = next; pq.push({price + nextPrice, nextPos, data}); for (int i = 0; i < 5; i++) { if ((data >> i) & 1) { continue; } long long newPrice = nextPrice * (10 - i - 1) / 10; pq.push({ newPrice + price, nextPos, data + (1 << i) }); } } } cin >> q; while (q--) { long long pos; cin >> pos; arr<5> price; for (int i = 0; i < 5; i++) { cin >> price[i]; } if (dist[pos][0] == 1e16) { // cout <<"noo" << endl; cout << -1 << endl; continue; } // cout << dist[pos][0] << endl; long long cPrice = 1e16; for (int i = 0; i < 32; i++) { bool good = true; long long curPrice = dist[pos][i]; for (int idx = 0; idx < 5; idx++) { if ((i >> idx & 1) == 0) { continue; } if (price[idx] == -1) { good = false; break; } curPrice += price[idx]; } if (!good) { continue; } cPrice = min(cPrice, curPrice); } cout << cPrice << endl; } }
#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...