QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#533088#8643. Board GameNevll#3 22ms8080kbC++142.7kb2024-08-25 17:04:562024-08-25 17:04:57

Judging History

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

  • [2024-08-25 17:04:57]
  • 评测
  • 测评结果:3
  • 用时:22ms
  • 内存:8080kb
  • [2024-08-25 17:04:56]
  • 提交

answer

# include <bits/stdc++.h>
# define ll long long
# define ld long double
# define pii pair<int, int>
# define fi first
# define se second
using namespace std;

// complexity : K^2 + 2K * (M log M)

int num[50001], N, M, K;
vector<int> edge[50001];
string S;
bool stop[50001], vis[150011];
ll dist[2][50001], ds[2][50001], ad[3]; // 0 = dist ke yg add 1, 1 dist yg ke add 2
// kalo 1 ada yg dist 0, buat jadi 2
// kalo 0 ada yg dist 0, buat jadi 1

void build() {
	for(int i=1;i<=N;i++) {
		dist[0][i] = dist[1][i] = 1e9;
	}
	priority_queue<pii> PQ;
	for(int i=1;i<=N;i++) {
		if(!stop[i]) continue;
		bool cek = 0;
		for(auto p : edge[i]) {
			if(stop[p]) cek = 1;
		}
		if(cek) PQ.push({0, i});
	}
	for(int i=1;i<=N;i++) vis[i] = 0;
	while(PQ.size()) {
		pii x = PQ.top();
		PQ.pop();
		if(vis[x.se]) continue;
		vis[x.se] = 1;
		dist[0][x.se] = -x.fi;
		
		for(auto p : edge[x.se]) {
			if(!vis[p]) {
				if(!stop[p]) PQ.push({x.fi - 1, p});
				else PQ.push({x.fi, p});
			}
		}
	}
	
	for(int i=1;i<=N;i++) vis[i] = 0;
	for(int i=1;i<=N;i++) {
		if(stop[i]) PQ.push({0, i});
	}
	while(PQ.size()) {
		pii x = PQ.top();
		PQ.pop();
		if(vis[x.se]) continue;
		vis[x.se] = 1;
		if(x.fi <= -1) dist[1][x.se] = -x.fi;
		else dist[1][x.se] = 2;
		
		for(auto p : edge[x.se]) {
			if(!vis[p]) {
				PQ.push({x.fi - 1, p});
			}
		}
	}
	
	for(int i=1;i<=N;i++) {
		if(stop[i]) dist[0][i]++;
	}
	for(int i=2;i<=K;i++) {
		ad[1] += min(dist[0][num[i]], dist[1][num[i]]);
		ad[2] += min(dist[0][num[i]] + 1ll, dist[1][num[i]] + 2ll);
	}
//	cout<<ad[0]<<" "<<ad[1]<<" "<<ad[2]<<endl;
}

ll ans[50001];

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	
	cin>>N>>M>>K;
	for(int i=0;i<M;i++) {
		int a, b;
		cin>>a>>b;
		edge[a].push_back(b);
		edge[b].push_back(a);
	}
	
	cin>>S;
	for(int i=0;i<N;i++) {
		stop[i + 1] = S[i] - '0';
	}
	
	for(int i=1;i<=K;i++) cin>>num[i];
	build();
	
	for(int i=1;i<=N;i++) ans[i] = 1e18;
	priority_queue< pair< pair<ll, int>, int> > PQ;
	for(int i=0;i<=3*N;i++) vis[i] = 0;
	PQ.push({{0, 0}, num[1]});
	while(PQ.size()) {
		pair<pair<ll, int>, int> x = PQ.top();
		PQ.pop();
		
	//	cout<<x.se<<" "<<x.fi.se<<endl;
		if(vis[3 * x.se + x.fi.se]) continue;
		vis[3 * x.se + x.fi.se] = 1;
		ans[x.se] = min(ans[x.se], -x.fi.fi + ad[-x.fi.se]);
	//	cout<<"ans : "<<ans[x.se]<<endl;
		for(auto p : edge[x.se]) {
			if(stop[x.se] && x.se != num[1]) {
				int val = x.fi.se - 1;
				if(val > 2) continue;
				if(!vis[3 * p + val]) PQ.push({{x.fi.fi - 1, val}, p});
			} else {
				if(!vis[3 * p + x.fi.se]) PQ.push({{x.fi.fi - 1, x.fi.se}, p});
			}
		}
	}
	for(int i=1;i<=N;i++) cout<<ans[i]<<"\n";
}

详细

Subtask #1:

score: 3
Accepted

Test #1:

score: 3
Accepted
time: 2ms
memory: 5812kb

input:

3000 3000 3000
2378 2385
1560 2450
189 2980
44 1140
425 1843
167 1563
439 2010
7 951
1311 1370
1305 2085
150 1600
16 2469
431 2674
317 2191
1845 2918
2195 2917
1210 1577
125 1049
911 1160
504 2060
376 2420
1676 2969
1343 1576
284 1869
835 1989
273 1330
234 1906
1482 1524
2415 2460
388 2897
2177 2600...

output:

76
52
40
54
67
54
62
36
44
32
60
61
58
29
34
22
64
25
31
33
14
79
80
58
68
29
67
69
47
60
48
55
45
11
24
51
17
24
47
29
50
57
89
54
62
63
55
61
7
41
61
27
64
60
63
55
44
43
39
48
57
47
65
65
55
43
51
48
22
57
47
28
52
51
50
61
41
61
69
50
41
53
42
58
45
26
60
52
30
56
47
56
32
55
44
58
56
71
69
41
6...

result:

ok 3000 lines

Test #2:

score: 3
Accepted
time: 11ms
memory: 6744kb

input:

30000 30000 30000
11640 15443
5731 12870
5066 28442
11803 29263
2399 20658
4911 11282
676 1962
10390 19686
6117 6722
22155 28614
2932 14721
11403 13488
6697 22434
19113 26975
20347 20663
15743 16072
19116 25652
10891 19389
1373 27384
14607 29107
6192 29223
7196 10267
15467 16280
21828 26032
365 982
...

output:

2610
3673
15
7659
10149
8209
878
4102
7582
10483
6418
6826
11546
12814
11394
7792
9097
7484
14575
913
5802
584
8172
961
7434
8828
14665
7642
14032
6284
8299
3040
9576
4953
47
13721
10634
3362
9103
4901
4022
11866
14548
5132
9252
13165
143
9494
2845
13149
5616
3023
13560
12315
8126
2002
5706
10657
14...

result:

ok 30000 lines

Test #3:

score: 3
Accepted
time: 17ms
memory: 7968kb

input:

50000 49999 50000
23237 38489
46903 47222
463 17722
5061 37126
21771 23294
4851 25450
408 41933
1298 5353
8952 44686
5842 17741
15835 33052
16401 17274
33117 33174
7070 24079
22424 46115
5336 6340
35165 36940
3308 36325
12014 20182
391 48629
9736 42693
5246 46582
22861 48389
3338 6669
31354 49668
11...

output:

8988
372
12633
8934
15728
15677
431
10910
20467
16345
10441
16923
12383
15090
11112
19353
21485
9819
17810
3071
41
99
8479
9616
1173
13790
1142
14800
19055
675
1086
2353
22330
18271
2373
11286
20247
21236
18133
11260
2792
19399
9049
18056
14190
3523
22890
19479
14288
9335
561
19226
12836
11409
8485
...

result:

ok 50000 lines

Test #4:

score: 3
Accepted
time: 11ms
memory: 8080kb

input:

49900 50000 100
21419 22725
19367 26559
4942 22766
16196 32249
12443 43575
17415 32668
3559 30282
6024 31186
4553 32107
1085 24970
27857 48472
15126 48937
22784 33748
16961 18301
21066 30382
41567 46191
17677 42298
2910 32294
14609 16464
14131 44143
8413 13472
17266 18767
567 48263
2410 29825
22159 ...

output:

4729
6824
18742
805
16289
4349
1296
5007
15785
15606
18374
4228
1685
19748
16689
7552
13232
5985
19529
7256
13074
6094
12823
7464
19302
3985
5081
4794
2513
6637
10664
6726
11115
11493
10542
4882
2626
10108
17287
690
8100
6464
10436
3789
14356
11646
18179
20174
19124
1188
20268
1232
4167
127
1224
166...

result:

ok 49900 lines

Subtask #2:

score: 0
Wrong Answer

Test #5:

score: 0
Wrong Answer
time: 3ms
memory: 6612kb

input:

3000 3000 3000
1391 1542
299 1578
1346 1528
46 1259
1513 2261
201 1717
56 1635
199 2327
847 882
1977 2161
465 1954
1723 2580
482 2105
906 2207
747 2742
2026 2845
1565 1809
295 311
278 2408
1215 2583
520 832
464 638
1223 1346
1799 2703
1022 2717
887 2160
619 2109
165 2478
879 1343
319 2463
56 815
109...

output:

25
47
29
15
51
29
39
23
47
39
23
39
27
39
5
39
19
26
30
31
43
32
39
86790
24
13
86787
52
31
24
36
22
33
31
32
22
36
43
24
25
30
32
86793
31
49
34
31
31
39
21
33
86793
34
40
23
43
44
37
32
37
48
86790
33
86783
42
46
28
86787
15
47
43
42
41
39
38
14
34
42
33
86775
24
37
36
12
14
28
47
43
34
27
45
41
1...

result:

wrong answer 230th lines differ - expected: '50', found: '86802'

Subtask #3:

score: 0
Wrong Answer

Test #13:

score: 0
Wrong Answer
time: 0ms
memory: 4924kb

input:

3000 3000 3000
997 1695
884 1068
654 1853
6 520
947 2382
787 2407
818 1795
2347 2718
46 1560
1180 2169
582 1881
1080 1766
770 2877
365 419
365 749
1315 2536
223 1867
216 545
1311 1952
1598 2796
141 620
1681 2938
301 2204
866 1710
872 961
369 466
2160 2936
2295 2359
1310 1744
1572 2088
1111 2618
1680...

output:

357
518
350
113
154
370
807992
808248
1395
807862
808596
215
807944
9
808144
488
375
195
808376
149
808647
808218
303
508
808491
19
808194
807920
807973
807987
808426
808521
555
808025
80
50
807858
808635
149
808195
140
808457
808263
807941
455
198
180
808087
472
71
112
169
331
807874
807940
31
8081...

result:

wrong answer 7th lines differ - expected: '718', found: '807992'

Subtask #4:

score: 0
Wrong Answer

Test #23:

score: 19
Accepted
time: 3ms
memory: 6216kb

input:

1500 3000 2
432 1120
324 1221
37 294
50 931
588 1149
178 887
460 517
268 533
649 935
123 1291
642 1025
1145 1489
630 1375
163 1407
842 1004
155 1300
296 1049
380 840
215 1224
283 981
211 1056
75 725
325 1437
591 680
1179 1253
876 1425
382 1230
1065 1436
612 784
121 770
349 633
140 1168
443 1019
103 ...

output:

6
6
7
4
5
5
6
3
5
7
5
6
5
5
5
6
6
6
3
5
5
6
3
6
5
6
3
3
6
6
5
6
4
5
7
6
6
6
5
2
5
5
6
5
4
7
4
4
5
5
5
7
6
5
5
3
6
6
5
5
6
5
6
4
5
6
4
7
3
6
6
4
5
5
4
7
6
6
6
7
5
3
5
6
4
6
4
6
4
6
4
6
5
6
3
4
6
4
5
3
6
5
6
7
4
6
5
6
7
5
4
6
5
5
6
6
6
4
5
5
6
4
4
6
6
6
6
6
6
6
6
5
6
6
5
6
4
6
5
6
6
6
6
5
7
4
6
4
6
5
...

result:

ok 1500 lines

Test #24:

score: 0
Wrong Answer
time: 2ms
memory: 6060kb

input:

3000 2999 5
1183 2619
603 1077
245 1639
988 1253
70 2760
2292 2975
2483 2998
851 1914
214 968
1902 2025
1636 2835
62 2320
2082 2708
267 1972
613 2739
1273 2062
2173 2928
1028 1532
417 2184
291 899
608 2280
922 1566
670 1218
1023 1213
1193 2777
1142 2410
532 1558
67 1473
1041 1652
146 1877
727 2468
5...

output:

1000000000000000000
1000000000000000000
1000000000000000000
1000000000000000000
1000000000000000000
1000000000000000000
1000000000000000000
1000000000000000000
1000000000000000000
1000000000000000000
1000000000000000000
26
1000000000000000000
26
20
1000000000000000000
27
1000000000000000000
10000000...

result:

wrong answer 1st lines differ - expected: '79', found: '1000000000000000000'

Subtask #5:

score: 0
Wrong Answer

Test #44:

score: 0
Wrong Answer
time: 22ms
memory: 7876kb

input:

50000 49999 2
25634 31370
8027 24849
12312 23307
3731 32856
28725 29829
23424 44542
9950 43281
17138 22049
29393 31047
24061 46387
861 3924
12114 24868
29242 36744
5090 11267
3946 26100
7151 22151
27368 49971
43548 44917
25373 45846
4117 43120
24675 34139
9043 21081
29857 41278
37558 41510
11300 402...

output:

1000000000000000000
120
1000000000000000000
1000000000000000000
68
38
72
1000000000000000000
1000000000000000000
123
1000000000000000000
95
61
164
1000000000000000000
103
72
58
1000000000000000000
97
1000000000000000000
73
64
57
1000000000000000000
59
67
1000000000000000000
1000000000000000000
99
10...

result:

wrong answer 1st lines differ - expected: '114', found: '1000000000000000000'

Subtask #6:

score: 0
Skipped

Dependency #5:

0%

Subtask #7:

score: 0
Skipped

Dependency #4:

0%

Subtask #8:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

0%