제출 #1290520

#제출 시각아이디문제언어결과실행 시간메모리
1290520AutomatiC__Bitaro’s Party (JOI18_bitaro)C++20
100 / 100
1135 ms411388 KiB
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <cctype> #include <iomanip> #include <algorithm> #include <cmath> #include <stack> #include <queue> #include <map> #include <set> #include <vector> #include <cstdlib> #include <bitset> #include <deque> #define inf 0x3f3f3f3f #define infll 0x3f3f3f3f3f3f3f3fll #define fi first #define se second using namespace std; typedef long long ll; typedef unsigned long long ull; const int maxn = 100005; vector<int> g[maxn]; vector<pair<int, int> > path[maxn]; int n, m, q; int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m >> q; for (int i = 1; i <= m; i++) { int x, y; cin >> x >> y; g[y].push_back(x); } int B = min((int)sqrt(n + 1), 300); vector<int> dis(n + 1, 0); for (int u = 1; u <= n; u++) { path[u].push_back(make_pair(0, u)); vector<int> port; for (int v : g[u]) { for (auto [w, k] : path[v]) { if (!dis[k]) { dis[k] = -w + 1; port.push_back(k); } else { dis[k] = max(-w + 1, dis[k]); } } } for (int v : port) { path[u].push_back(make_pair(-dis[v], v)); dis[v] = 0; } sort(path[u].begin(), path[u].end()); while (path[u].size() > B) path[u].pop_back(); // cout << path[u].size() << endl; } vector<int> cut(n + 1, 0); while (q--) { int x, y; cin >> x >> y; vector<int> c(y + 1, 0); for (int i = 1; i <= y; i++) { cin >> c[i]; cut[c[i]] = 1; } if (y >= B) { int ans = -1; vector<int> f(n + 1, 0); for (int u = x; u; u--) { if (u != x && !f[u]) continue; if (!cut[u]) ans = max(ans, f[u]); for (int v : g[u]) f[v] = max(f[v], f[u] + 1); } cout << ans << "\n"; // cout << "!1\n"; } else { int ans = -1; for (auto [w, v] : path[x]) { // cout << x << " " << v << " " << -w << endl; if (!cut[v]) { ans = -w; break; } } cout << ans << "\n"; // cout << "!2\n"; } for (int i = 1; i <= y; i++) cut[c[i]] = 0; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...