Submission #1169790

#TimeUsernameProblemLanguageResultExecution timeMemory
1169790daoquanglinh2007Voting Cities (NOI22_votingcity)C++20
100 / 100
70 ms8376 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pii pair <int, int> #define fi first #define se second #define mp make_pair const int NM = 5000, inf = 1e18; int N, E, K, Q, T[NM+5]; vector <pii> adj[NM+5]; int d[NM+5][1<<5]; priority_queue <pair <int, pii>, vector <pair <int, pii> >, greater <pair <int, pii> > > pq; void dijkstra(){ for (int i = 0; i < N; i++) for (int j = 0; j < (1<<5); j++) d[i][j] = +inf; for (int i = 0; i < K; i++){ d[T[i]][0] = 0; pq.push(mp(0, mp(T[i], 0))); } while (!pq.empty()){ int u = pq.top().se.fi, msk = pq.top().se.se; if (d[u][msk] != pq.top().fi){ pq.pop(); continue; } pq.pop(); for (pii _ : adj[u]){ int v = _.fi, c = _.se; if (d[u][msk]+c < d[v][msk]){ d[v][msk] = d[u][msk]+c; pq.push(mp(d[v][msk], mp(v, msk))); } for (int i = 0; i < 5; i++){ if ((msk>>i)&1) continue; int nxt_msk = msk+(1<<i), nc = c*(10-i-1)/10; if (d[u][msk]+nc < d[v][nxt_msk]){ d[v][nxt_msk] = d[u][msk]+nc; pq.push(mp(d[v][nxt_msk], mp(v, nxt_msk))); } } } } } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N >> E >> K; for (int i = 0; i < K; i++) cin >> T[i]; for (int i = 0; i < E; i++){ int u, v, c; cin >> u >> v >> c; adj[v].push_back(mp(u, c)); } dijkstra(); cin >> Q; while (Q--){ int S, P[5]; cin >> S; for (int i = 0; i < 5; i++) cin >> P[i]; int ans = +inf; for (int msk = 0; msk < (1<<5); msk++){ bool chk = 1; int res = d[S][msk]; for (int i = 0; i < 5; i++){ if (((msk>>i)&1) == 0) continue; if (P[i] == -1){ chk = 0; break; } res += P[i]; } if (chk) ans = min(ans, res); } if (ans == +inf) cout << "-1\n"; else cout << ans << '\n'; } return 0; }
#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...