Submission #1206681

#TimeUsernameProblemLanguageResultExecution timeMemory
1206681pedroslreyBoard Game (JOI24_boardgame)C++20
3 / 100
4097 ms1114112 KiB
#include <bits/stdc++.h> using namespace std; using graph = vector<vector<int>>; using lli = long long; vector<vector<int>> calc_dists(graph &G, int s, vector<bool> &red, int mx) { int n = G.size(); vector<vector<int>> dist(n, vector<int>(mx, -1)); queue<pair<int, int>> q; q.emplace(s, 0); dist[s][0] = 0; while (!q.empty()) { auto [u, k] = q.front(); q.pop(); for (int v: G[u]) if (k + red[v] < mx && dist[v][k + red[v]] == -1) { q.emplace(v, k + red[v]); dist[v][k + red[v]] = dist[u][k] + 1; } } return dist; } int main() { int n, m, p; cin >> n >> m >> p; graph G(n); for (int i = 0; i < m; ++i) { int u, v; cin >> u >> v; --u; --v; G[u].push_back(v); G[v].push_back(u); } vector<bool> red(n); bool ok = false; for (int i = 0; i < n; ++i) { char c; cin >> c; red[i] = c - '0'; ok = ok || red[i]; } int s; cin >> s; --s; if (!ok) { vector<vector<int>> dist = calc_dists(G, s, red, 1); for (int i = 0; i < n; ++i) cout << dist[i][0] << " "; cout << "\n"; return 0; } --p; vector<int> frens(p); for (int &f: frens) { cin >> f; --f; } vector<vector<int>> dists = calc_dists(G, s, red, n + 1); vector<lli> costs(n + 1); for (int f: frens) { vector<vector<int>> dist = calc_dists(G, f, red, n + 1); for (int i = 1; i <= n; ++i) { int mn = 1e9; for (int j = 0; j < n; ++j) if (red[j]) if (dist[j][i] != -1) mn = min(mn, dist[j][i]); if (mn != 1e9) costs[i] += mn; else costs[i] = 1e18; } } for (int i = 0; i < n; ++i) { lli mn = 1e18; if (!red[i] || i == s) { for (int j = 0; j <= n; ++j) if (dists[i][j] != -1) mn = min(mn, dists[i][j] + costs[j]); } else { for (int j = 1; j <= n; ++j) if (dists[i][j] != -1) mn = min(mn, dists[i][j] + costs[j-1]); } cout << mn << "\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...