This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
struct segtree{
int n;
std::vector<int> t;
segtree(int n) : n(n), t(2 * n, 0) { }
void update(int p, int val) {
for (t[p += n] += val; p > 1; p >>= 1) {
t[p >> 1] = std::min(t[p], t[p ^ 1]);
}
}
int get(int l, int r) {
int res = 1e9;
for (l += n, r += n; l <= r; l >>= 1, r >>= 1) {
if (l % 2 == 1) res = std::min(res, t[l++]);
if (r % 2 == 0) res = std::min(res, t[r--]);
}
return res;
}
};
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n, m, q;
std::cin >> n >> m >> q;
std::vector<std::vector<int>> e(n), p(n);
for (int i = 0; i < m; i++) {
int u, v;
std::cin >> u >> v;
u--;
v--;
e[u].push_back(v);
p[v].push_back(u);
}
std::vector<int> dp(n);
segtree seg(n);
for (int u = 0; u < n; u++) {
for (auto v : p[u]) {
dp[u] = std::max(dp[u], dp[v] + 1);
}
seg.update(u, dp[u]);
}
while (q--) {
int t, k;
std::cin >> t >> k;
t--;
std::vector<int> c(k);
for (int i = 0, x; i < k; i++) {
std::cin >> c[i];
c[i]--;
seg.update(c[i], 1e9);
}
int ans = std::max(-1, dp[t] - seg.get(0, t));
std::cout << ans << "\n";
for (auto x : c) {
seg.update(x, -1e9);
}
}
return 0;
}
Compilation message (stderr)
bitaro.cpp: In function 'int main()':
bitaro.cpp:47:25: warning: unused variable 'x' [-Wunused-variable]
47 | for (int i = 0, x; i < k; i++) {
| ^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |