Submission #198335

#TimeUsernameProblemLanguageResultExecution timeMemory
198335quocnguyen1012Bitaro’s Party (JOI18_bitaro)C++14
100 / 100
1543 ms333600 KiB
#include <bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back using namespace std; typedef long long ll; const int maxn = 1e5 + 5; int magic = 205; vector<int> adj[maxn], radj[maxn]; int N, M, Q; pair<int, int> dist[maxn][405]; int D[maxn], del[maxn]; bool vis[maxn]; signed main(void) { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); if (fopen("A.INP", "r")){ freopen("A.INP", "r", stdin); freopen("A.OUT", "w", stdout); } cin >> N >> M >> Q; while (M--){ int u, v; cin >> u >> v; adj[v].pb(u); radj[u].pb(v); } vector<int> node; magic = sqrt(N); for (int i = 1; i <= N; ++i){ for (int j = 1; j <= magic; ++j){ dist[i][j] = mp(-1, -1); } } for (int u = 1; u <= N; ++u){ node.clear(); node.pb(u); for (int it : adj[u]){ for (int k = 1; k <= magic; ++k){ if (dist[it][k].fi == -1) continue; int v = dist[it][k].se; D[v] = max(D[v], dist[it][k].fi + 1); if (!vis[v]){ vis[v] = 1; node.pb(v); } } } sort(node.begin(), node.end(), [&](const int & x, const int & y){ return D[x] > D[y]; }); for (int j = 1; j <= magic && j <= (int)node.size(); ++j){ dist[u][j] = mp(D[node[j - 1]], node[j - 1]); } for (auto & v : node) D[v] = vis[v] = 0; } while (Q--){ int u, n; cin >> u >> n; for (int i = 1; i <= n; ++i){ cin >> del[i]; vis[del[i]] = true; } int ret = -2; for (int j = 1; j <= magic; ++j){ if (dist[u][j].fi == -1){ ret = -1; break; } else if (!vis[dist[u][j].se]){ ret = dist[u][j].fi; break; } } if (ret == -2){ ret = -1; if (!vis[u]) ret = 0; for (int i = u - 1; i >= 1; --i){ D[i] = -1e8; for (int v : radj[i]){ if (v <= u){ D[i] = max(D[i], D[v] + 1); } } if (!vis[i]){ ret = max(ret, D[i]); } } for (int i = u; i >= 1; --i){ D[i] = 0; } } for (int i = 1; i <= n; ++i){ vis[del[i]] = false; } cout << ret << '\n'; } }

Compilation message (stderr)

bitaro.cpp: In function 'int main()':
bitaro.cpp:24:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
     freopen("A.INP", "r", stdin);
     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
bitaro.cpp:25:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
     freopen("A.OUT", "w", stdout);
     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...