Submission #1127579

#TimeUsernameProblemLanguageResultExecution timeMemory
1127579liemdinatBitaro’s Party (JOI18_bitaro)C++17
100 / 100
939 ms277888 KiB
#include <bits/stdc++.h> #define FOR(i, k, n) for(int i = k; i <= n; i++) #define FORD(i, k, n) for(int i = k; i >= n; i--) #define REP(i, n) for(int i = 0; i < n; i++) #define REPD(i, n) for(int i = n - 1; i >= 0; i--) #define ii pair<int,int> #define trii pair<int,ii> #define fi first #define se second #define int long long #define vi vector<int> #define pb push_back #define all(x, n) (x) + 1, (x) + n + 1 #define allv(x) (x).begin(), (x).end() #define vii vector<ii> #define sz(x) ((int)x.size()) using namespace std; const int N = 1e5 + 5; const int B = 100; vi rg[N]; vii lps[N]; int bs[N]; int dp[N]; int n, m, q; bool ava[N]; int from[N]; void cal(int t) { FOR(i, 1, t) { if (ava[i]) dp[i] = 0; else dp[i] = -1; for (int j : rg[i]) { if (dp[j] != -1) dp[i] = max(dp[i], dp[j] + 1); } } cout << dp[t] << '\n'; } int32_t main() { iostream::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m >> q; FOR(i, 1, m) { int u, v; cin >> u >> v; rg[v].pb(u); } memset(from, -1, sizeof(from)); FOR(i, 1, n) { static vi fidx; fidx.clear(); lps[i].pb({0, i}); for (int j : rg[i]) { for (ii &x : lps[j]) { if (from[x.se] == -1) { fidx.pb(x.se); from[x.se] = x.fi + 1; } else { from[x.se] = max(from[x.se], x.fi + 1); } } } for (int x : fidx) { lps[i].pb({from[x], x}); } sort(allv(lps[i])); reverse(allv(lps[i])); while(sz(lps[i]) > B) lps[i].pop_back(); for (int x : fidx) { from[x] = -1; } } memset(ava, true, sizeof ava); FOR(i, 1, q) { int t, y; cin >> t >> y; FOR(j, 1, y) { cin >> bs[j]; } FOR(i, 1, y) ava[bs[i]] = false; if (y >= B) { cal(t); } else { bool f = false; REP(i, sz(lps[t])) { if (ava[lps[t][i].se]) { cout << lps[t][i].fi << '\n'; f = true; break; } } if (!f) { cout << -1 << '\n'; } } FOR(i, 1, y) ava[bs[i]] = true; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...