Submission #1234878

#TimeUsernameProblemLanguageResultExecution timeMemory
1234878CrabCNHBitaro’s Party (JOI18_bitaro)C++20
0 / 100
7 ms10568 KiB
#include <bits/stdc++.h> #define task "BriantheCrab" #define int long long #define pii pair <int, int> #define fi first #define se second #define szf sizeof #define sz(s) (int)((s).size()) #define all(v) (v).begin(), (v).end() typedef long long ll; typedef unsigned long long ull; typedef long double ld; using namespace std; template <class T> void minimize (T &t, T f) {if (t > f) t = f;} template <class T> void maximize (T &t, T f) {if (t < f) t = f;} const int maxN = 2e5 + 5; const int inf = 1e18 + 7; const int mod = 1e9 + 7; int n, m, q; vector <int> adj[maxN]; vector <pii> best[maxN]; int dist[maxN], mark[maxN], del[maxN]; int cnt = 0; const int block = 320; bool cmp (pii a, pii b) { return a.fi > b.fi; } void solve () { cin >> n >> m >> q; for (int i = 1; i <= m; ++ i) { int u, v; cin >> u >> v; adj[v].push_back (u); } for (int u = 1; u <= n; ++ u) { ++ cnt; vector <int> temp; dist[u] = 0; best[u].push_back ({0, u}); mark[u] = cnt; temp.push_back (u); for (int v : adj[u]) { for (auto [d, p] : best[v]) { if (mark[p] != cnt) { mark[p] = cnt; dist[p] = d + 1; best[u].push_back ({dist[p], p}); temp.push_back (p); } else { maximize (dist[p], d + 1); } } } best[u].clear (); for (int p : temp) { best[u].push_back ({dist[p], p}); } sort (all (best[u]), cmp); while (sz (best[u]) > block) { best[u].pop_back (); } } while (q --) { int t, y; cin >> t >> y; vector <int> banned (y); for (int i = 0; i < y; ++ i) { cin >> banned[i]; del[banned[i]] = 1; } int res = -1; if (y < block - 10) { for (auto [d, v] : best[t]) { if (!del[v]) { res = d; break; } } } else { vector <int> dp (n + 1, 0); for (int i = 1; i <= n; ++ i) { if (del[i]) { dp[i] = -inf; } } if (!del[t]) { res = 0; } for (int u = 1; u <= t; ++ u) { for (int v : adj[u]) { if (dp[v] != -inf) { maximize (dp[u], dp[v] + 1); } } if (!del[u]) { maximize (res, dp[u]); } } } cout << res << '\n'; for (int v : banned) { del[v] = 0; } } return; } signed main () { cin.tie (nullptr) -> sync_with_stdio (false); if (fopen (task".inp", "r")) { freopen (task".inp", "r", stdin); freopen (task".out", "w", stdout); } int t = 1; //cin >> t; while (t --) { solve (); } return 0; } // thfv

Compilation message (stderr)

bitaro.cpp: In function 'int main()':
bitaro.cpp:129:17: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  129 |         freopen (task".inp", "r", stdin);
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
bitaro.cpp:130:17: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  130 |         freopen (task".out", "w", stdout);
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...