QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#874479#860. We apologize for any inconvenienceasdfsdf#WA 9ms7012kbC++231.9kb2025-01-28 07:09:172025-01-28 07:09:17

Judging History

你现在查看的是最新测评结果

  • [2025-01-28 07:09:17]
  • 评测
  • 测评结果:WA
  • 用时:9ms
  • 内存:7012kb
  • [2025-01-28 07:09:17]
  • 提交

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();
}

詳細信息

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'