QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#415551#860. We apologize for any inconvenienceAtalasion#AC ✓1115ms13852kbC++142.5kb2024-05-20 23:26:292024-05-20 23:26:29

Judging History

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

  • [2024-05-20 23:26:29]
  • 评测
  • 测评结果:AC
  • 用时:1115ms
  • 内存:13852kb
  • [2024-05-20 23:26:29]
  • 提交

answer


#include <bits/stdc++.h>

#define F first
#define S second
#define pb push_back
#define all(x) x.begin(), x.end()
#pragma GCC optimise ("ofast")
#pragma GCC optimise("unroll-loops")

using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;

const int N = 750 + 10;
const ll MOD = 1000000000 + 7;
const ll INF = 1000000000000000000;
const ll LOG = 25;
const int H = 313;

int n, k, mark[N], mark2[N][N], d[N][N];
vi com[N];
vi tot_com[N];
queue<int> q[N];

void solve(int v){
	while(q[v].size()){
		int fr = q[v].front();
		q[v].pop();
		for (auto u:tot_com[fr]){
			if (d[v][u] > d[v][fr] + 1){
				d[v][u] = d[v][fr] + 1;
				q[v].push(u);
			}
		}
	}
	return;
}

int calc(){
	int mx = 0;
	for (int i = 1; i <= n; i++){
		for (int j = 1; j <= n; j++){
			if (d[i][j] <= k) mx = max(mx, d[i][j]);
		}
	}
	return mx;
}

void Main(){
	cin >> n >> k;
	memset(mark, 0, sizeof mark);
	memset(mark2, 0, sizeof mark2);
	for (int i = 0; i < N; i++) com[i].clear();
	for (int i = 0; i < N; i++) tot_com[i].clear();
	memset(d, 31, sizeof d);
	for (int i = 1; i <= k; i++){
		int t;
		cin >> t;
		for (int j = 0; j < t; j++){
			int x;
			cin >> x;
			com[i].pb(x);
		}
		
	}
	
	vi Q;
	int s;
	cin >> s;
	for (int i = 0; i < s; i++){
		int x;
		cin >> x;
		Q.pb(x);
		mark[x] = 1;
	}
	for (int i = 1; i <= k; i++){
		if (mark[i] == 0){
			for (int j = 0; j < com[i].size(); j++){
				for (int l = j + 1; l < com[i].size(); l++){
					mark2[com[i][j]][com[i][l]] = 1;
					mark2[com[i][l]][com[i][j]] = 1;
				}
			}	
		}
	}
	for (int i = 1; i <= n; i++){
		for (int j = 1; j <= n; j++){
			if (mark2[i][j]) tot_com[i].pb(j);
		}
	}
	for (int i = 1; i <= n; i++) {d[i][i] = -1; q[i].push(i);}
	for (int i = 1; i <= n; i++)solve(i);
	vi ans;
	ans.pb(calc());
	for (int i = s - 1; i >= 0; i--){
		int v = Q[i];
		memset(mark, 0, sizeof mark);
		for (int j = 1; j <= n; j++){
			int mn = d[j][com[v][0]];
			for (auto u:com[v]){
				mn = min(mn, d[j][u]);
			}
			for (auto u:com[v]){
				if (d[j][u] > mn + 1){
					d[j][u] = mn + 1;
					q[j].push(u);
				}
			}
			solve(j);
		}
		for (auto u:com[v]){
			for (auto x:com[v]){
				if (u != x && mark2[u][x] != 1) {tot_com[u].pb(x); mark2[u][x] = 1;}
			}
		}
		ans.pb(calc());
	}
	reverse(all(ans));
	for (auto u:ans)cout << u << '\n';
	return;
}

int main(){
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	int t;
	cin >> t;
	while (t--){
		Main();
	}
	



}

详细

Test #1:

score: 100
Accepted
time: 2ms
memory: 8616kb

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: 0
Accepted
time: 17ms
memory: 8992kb

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
2
2
2
2
2
2
1
1
0
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
1
0
0
0
0
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
2
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
1
1
1
0
2
2
2
2
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
...

result:

ok 893 numbers

Test #3:

score: 0
Accepted
time: 806ms
memory: 13124kb

input:

2
750 750
2 47 500
2 51 145
2 22 531
2 22 354
2 22 727
2 25 700
2 7 159
2 42 356
2 57 727
2 28 237
2 57 714
2 68 511
2 29 81
2 65 318
2 43 91
2 65 488
2 68 549
2 16 310
2 30 618
2 6 105
2 7 468
2 34 253
2 51 155
2 21 205
2 22 470
2 36 642
2 17 649
2 66 229
2 10 409
2 65 105
2 21 395
2 51 552
2 25 55...

output:

2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
...

result:

ok 1000 numbers

Test #4:

score: 0
Accepted
time: 378ms
memory: 8724kb

input:

4
750 750
2 511 512
2 649 650
2 154 155
2 128 129
2 344 345
2 453 454
2 613 614
2 10 11
2 491 492
2 356 357
2 299 300
2 294 295
2 699 700
2 441 442
2 13 14
2 78 79
2 583 584
2 430 431
2 342 343
2 63 64
2 547 548
2 100 101
2 584 585
2 14 15
2 33 34
2 619 620
2 2 3
2 392 393
2 383 384
2 631 632
2 614 ...

output:

748
695
444
444
444
444
326
326
326
257
257
257
162
162
162
152
152
152
152
152
93
93
93
93
93
93
93
93
93
93
93
93
93
72
72
72
72
72
72
62
62
62
62
62
62
62
62
62
62
62
62
62
62
62
49
49
48
48
48
48
48
48
48
48
48
48
48
48
48
48
42
37
37
37
37
37
37
37
37
37
37
37
37
37
37
37
37
33
26
26
26
26
26
2...

result:

ok 997 numbers

Test #5:

score: 0
Accepted
time: 1115ms
memory: 13852kb

input:

2
750 750
540 514 18 412 670 208 26 633 215 378 588 530 101 563 276 247 697 596 328 83 129 494 13 298 582 269 222 649 57 14 365 325 419 679 579 747 583 97 571 744 632 61 622 681 67 127 624 524 399 216 589 275 644 271 442 447 444 460 184 118 542 290 746 613 704 25 353 477 364 715 292 294 224 201 512 ...

output:

2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
...

result:

ok 1000 numbers

Test #6:

score: 0
Accepted
time: 288ms
memory: 9492kb

input:

2
498 498
164 139 208 482 253 14 37 20 228 198 467 39 174 48 288 353 155 190 246 119 455 76 149 167 128 375 183 415 373 212 425 36 161 304 348 310 204 497 231 399 490 324 211 475 340 309 24 58 151 166 471 443 321 286 67 473 251 219 383 277 176 142 171 82 86 136 427 235 278 498 343 23 391 85 60 110 2...

output:

3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
...

result:

ok 996 numbers

Test #7:

score: 0
Accepted
time: 345ms
memory: 10248kb

input:

2
500 500
2 1 2
2 2 1
2 3 4
2 4 3
2 5 6
2 6 5
2 7 8
2 8 7
2 9 10
2 10 9
2 11 12
2 12 11
2 13 14
2 14 13
2 15 16
2 16 15
2 17 18
2 18 17
2 19 20
2 20 19
2 21 22
2 22 21
2 23 24
2 24 23
2 25 26
2 26 25
2 27 28
2 28 27
2 29 30
2 30 29
2 31 32
2 32 31
2 33 34
2 34 33
2 35 36
2 36 35
2 37 38
2 38 37
2 39...

output:

1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
...

result:

ok 1000 numbers