이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#define x first
#define y second
#define bug(x) cerr<<#x<<" = "<<x<<'\n'
using namespace std;
typedef pair <int, int> ii;
const int maxn = 100100;
const int K = 320;
int N, M, Q;
int dp[maxn];
bool has[maxn];
vector <int> br[maxn];
vector <ii> F[maxn];
vector <ii> merge(vector <ii> &A, vector <ii> &B) {
vector <ii> ret;
int l = 0, r = 0, cn = 0;
while (l < (int)A.size() || r < (int)B.size()) {
if (l == (int)A.size()) {
if (!has[B[r].x]) {
ret.push_back({B[r].x, B[r].y + 1});
has[B[r].x] = true;
}
++r;
} else if (r == (int)B.size()) {
if (!has[A[l].x]) {
ret.push_back({A[l].x, A[l].y});
has[A[l].x] = true;
}
++l;
} else if (A[l].y > B[r].y + 1) {
if (!has[A[l].x]) {
ret.push_back({A[l].x, A[l].y});
has[A[l].x] = true;
}
++l;
} else {
if (!has[B[r].x]) {
ret.push_back({B[r].x, B[r].y + 1});
has[B[r].x] = true;
}
++r;
}
if ((int)ret.size() == K + 1) break;
}
for (auto p : ret) {
has[p.x] = 0;
}
return ret;
}
signed main() {
ios::sync_with_stdio(0); cin.tie(0);
// freopen("cc.inp", "r", stdin);
// freopen("cc.out", "w", stdout);
cin >> N >> M >> Q;
while (M--) {
int x, y;
cin >> x >> y;
if (x > y) swap(x, y);
br[y].push_back(x);
}
for (int i = 1; i <= N; ++i) {
F[i].push_back({i, 0});
for (int j : br[i]) {
F[i] = merge(F[i], F[j]);
}
}
while (Q--) {
int T, Y; cin >> T >> Y;
vector <int> v;
for (int i = 1; i <= Y; ++i) {
int X; cin >> X;
has[X] = true;
v.push_back(X);
}
if (Y >= K) {
memset(dp, -0x3f, sizeof dp);
int re = 0;
dp[T] = 0;
if (has[T]) re = -1;
for (int i = T; i >= 1; --i) {
for (int j : br[i]) {
dp[j] = max(dp[j], dp[i] + 1);
if (has[j]) continue;
re = max(re, dp[j]);
}
}
cout << re << '\n';
} else {
int cn = 0;
for (auto p : F[T]) {
if (!has[p.x]) {
cout << p.y << '\n';
++cn;
break;
}
}
if (!cn) cout << -1 << '\n';
}
for (auto X : v) has[X] = false;
}
}
컴파일 시 표준 에러 (stderr) 메시지
bitaro.cpp: In function 'std::vector<std::pair<int, int> > merge(std::vector<std::pair<int, int> >&, std::vector<std::pair<int, int> >&)':
bitaro.cpp:21:21: warning: unused variable 'cn' [-Wunused-variable]
21 | int l = 0, r = 0, cn = 0;
| ^~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |