Submission #1163385

#TimeUsernameProblemLanguageResultExecution timeMemory
1163385altern23Voting Cities (NOI22_votingcity)C++20
100 / 100
65 ms8432 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<ll, ll> #define fi first #define sec second const ll N = 1e3; const ll INF = 4e18; const ll MOD = 1e9 + 7; ll expo(ll a, ll b){ ll ans = 1; for(;b > 0;){ if(b & 1) ans = (ans * a) % MOD; a = (a * a) % MOD; b /= 2; } return ans; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tc = 1; // cin >> tc; for(;tc--;){ ll n, e, k; cin >> n >> e >> k; vector<vector<ll>> dist(n + 5, vector<ll>(1LL << 5, INF)); vector<pii> adj[n + 5]; priority_queue<pair<ll, pii>, vector<pair<ll, pii>>, greater<pair<ll, pii>>> pq; for(int i = 1; i <= k; i++){ ll x; cin >> x; dist[x][0] = 0; pq.push({0, {x, 0}}); } for(int i = 1; i <= e; i++){ ll u, v, w; cin >> u >> v >> w; adj[v].push_back({u, w}); } for(;!pq.empty();){ auto [cur, node] = pq.top(); pq.pop(); if(cur > dist[node.fi][node.sec]) continue; for(auto [i, j] : adj[node.fi]){ if(dist[i][node.sec] > cur + j){ dist[i][node.sec] = cur + j; pq.push({dist[i][node.sec], {i, node.sec}}); } for(int add = 0; add < 5; add++){ if(!(node.sec & (1LL << add))){ if(dist[i][node.sec | (1LL << add)] > cur + j * (10 - (add + 1)) / 10){ dist[i][node.sec | (1LL << add)] = cur + j * (10 - (add + 1)) / 10; pq.push({dist[i][node.sec | (1LL << add)], {i, node.sec | (1LL << add)}}); } } } } } ll q; cin >> q; for(int i = 1; i <= q; i++){ ll s; cin >> s; vector<ll> p(5); for(int j = 0; j < 5; j++) cin >> p[j]; ll ans = INF; for(ll mask = 0; mask < (1LL << 5); mask++){ bool ok = 1; ll cost = 0; for(ll j = 0; j < 5; j++){ if(mask & (1LL << j)){ if(p[j] == -1){ ok = 0; break; } cost += p[j]; } } if(ok){ ans = min(ans, cost + dist[s][mask]); } } 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...