QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#874479 | #860. We apologize for any inconvenience | asdfsdf# | WA | 9ms | 7012kb | C++23 | 1.9kb | 2025-01-28 07:09:17 | 2025-01-28 07:09:17 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<pair<int, int>> st;
#define MAX 1010
vector<int> ls[MAX];
int chk[MAX];
int mp[MAX][MAX];
int p[MAX];
int qv[MAX];
int ans[MAX];
int find(int a) {
if (p[a] == a) return a;
return p[a] = find(p[a]);
}
bool uni(int a, int b) {
a = find(a);
b = find(b);
if (a == b) return true;
p[a] = b;
return false;
}
int cnt[MAX];
int dv[MAX];
void solve() {
int N, K;
cin >> N >> K;
int i, j, a, r;
for (i = 1; i <= N; i++) p[i] = i;
for (i = 1; i <= K; i++) {
cin >> r;
while (r--) {
cin >> a;
ls[i].push_back(a);
}
}
int Q;
cin >> Q;
for (i = 1; i <= Q; i++) {
cin >> qv[i];
chk[qv[i]] = 1;
}
for (i = 1; i <= N; i++) for (j = 1; j <= N; j++) mp[i][j] = (i == j ? 0 : N + 1);
/*
auto add = [&](int u, int v) {
if (uni(u, v)) {
for (i = 1; i <= N; i++) {
for (j = 1; j <= N; j++) {
mp[i][j] = min(mp[i][j], 1 + min(mp[i][u] + mp[v][j], mp[i][v] + mp[u][j]));
}
}
}
};
*/
for (int q = 1; q <= K; q++) {
if (!chk[q]) {
for (j = 1; j <= N; j++) {
dv[j] = N + 10;
for (auto v : ls[q]) dv[j] = min(dv[j], mp[j][v]);
}
for (i = 1; i <= N; i++) for (j = 1; j <= N; j++) mp[i][j] = min(mp[i][j], dv[i] + dv[j] + 1);
}
}
auto getans = [&]() {
int mx = 0;
int i, j;
for (i = 1; i <= N; i++) {
for (j = i + 1; j <= N; j++) {
if (mp[i][j] <= N) mx = max(mx, mp[i][j]);
}
}
return mx;
};
ans[Q + 1] = getans();
for (i = Q; i >= 1; i--) {
int q = qv[i];
for (j = 1; j <= N; j++) {
dv[j] = N + 10;
for (auto v : ls[q]) dv[j] = min(dv[j], mp[j][v]);
}
for (int i = 1; i <= N; i++) for (j = 1; j <= N; j++) mp[i][j] = min(mp[i][j], dv[i] + dv[j] + 1);
ans[i] = getans();
}
for (i = 1; i <= Q + 1; i++) cout << ans[i] - 1 << '\n';
}
signed main() {
ios::sync_with_stdio(false), cin.tie(0);
int T;
cin >> T;
while (T--) solve();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3584kb
input:
1 5 4 3 1 3 5 2 1 4 2 2 3 2 2 4 3 1 4 3
output:
1 2 0 0
result:
ok 4 number(s): "1 2 0 0"
Test #2:
score: -100
Wrong Answer
time: 9ms
memory: 7012kb
input:
35 20 20 2 2 13 2 2 9 7 10 3 9 15 5 11 4 9 16 19 15 4 17 18 5 3 8 8 12 20 16 11 18 9 6 4 12 4 18 15 17 6 16 19 14 7 5 20 9 3 8 14 4 5 14 7 9 17 5 3 17 11 20 15 19 11 16 5 8 13 15 20 18 9 10 14 7 4 3 13 19 10 17 6 8 15 9 4 12 20 7 14 16 5 4 12 11 6 18 14 20 17 18 4 8 15 11 16 14 6 5 13 19 3 8 3 10 8 ...
output:
1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 -1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 -1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 -1 1 1 1 1 1 1 1 ...
result:
wrong answer 32nd numbers differ - expected: '2', found: '1'