Submission #932283

#TimeUsernameProblemLanguageResultExecution timeMemory
932283vjudge1Bitaro’s Party (JOI18_bitaro)C++17
0 / 100
2 ms7260 KiB
#include <bits/stdc++.h> using namespace std; #define N 100005 #define fi first #define se second #define blsiz 450 typedef pair<int, int> ii; int n, m, q, ac[N], d[N], del[N]; vector<int> adj[N], radj[N], lit; vector<ii> gt[N]; bool cmp(int& a, int & b){ return d[a] > d[b]; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(NULL); cin >> n >> m >> q; for (int i = 1; i <= m; i++){ int u, v; cin >> u >> v; adj[u].push_back(v); radj[v].push_back(u); } for (int i = 1; i <= n; i++){ lit.clear(); lit.push_back(i); for (auto x : radj[i]){ for (auto xx : gt[x]){ int u = xx.se; int du = xx.fi; if (ac[u] != i){ d[u] = du + 1; ac[u] = i; lit.push_back(u); } else { d[u] = max(d[u], du + 1); } } } sort(lit.begin(), lit.end(), cmp); int siz = lit.size(); for (int j = 0; j < min(blsiz, siz); j++){ gt[i].push_back({d[lit[j]], lit[j]}); } } int cnt = 0; while (q--){ cnt++; int u, k; cin >> u >> k; for (int i = 1; i <= k; i++){ int val; cin >> val; del[val] = cnt; } if (k < blsiz){ for (auto x : gt[u]){ int v = x.se, dv = x.fi; if (del[v] == cnt) continue; cout << dv << "\n"; break; } } else { //continue; for (int i = 1; i <= n; i++) d[i] = -1; for (int i = 1; i <= n; i++){ if (del[i] != cnt){ d[i] = max(d[i], 0); } if (d[i] == -1) continue; for (auto x : adj[i]){ d[x] = max(d[x], d[i] + 1); } } cout << d[u] << "\n"; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...