QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#532968#8643. Board GameNevll#0 2630ms8112kbC++142.9kb2024-08-25 15:11:282024-08-25 15:11:28

Judging History

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

  • [2024-08-25 15:11:28]
  • 评测
  • 测评结果:0
  • 用时:2630ms
  • 内存:8112kb
  • [2024-08-25 15:11:28]
  • 提交

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[100011];
ll dist[2][50001], ds[2][50001]; // 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;
		if(x.fi <= -1) dist[0][x.se] = -x.fi;
		else dist[0][x.se] = 1;
		
		for(auto p : edge[x.se]) {
			if(!vis[p]) PQ.push({x.fi - 1, 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=2;i<=K;i++) {
	//	cout<<"dist : "<<dist[0][num[i]]<<" "<<dist[1][num[i]]<<endl;
		for(int c=0;c<=2*K;c++) ds[1][c] = 1e18;
		for(int c=0;c<=2*K;c++) {
			if(c + 1 <= 2 * K) ds[1][c + 1] = min(ds[1][c + 1], ds[0][c] + dist[0][num[i]]);
			if(c + 2 <= 2 * K) ds[1][c + 2] = min(ds[1][c + 2], ds[0][c] + dist[1][num[i]]);
		}
		for(int c=0;c<=2*K;c++) ds[0][c] = ds[1][c];
	}
}

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;
	for(int i=0;i<=2*K;i++) {
		priority_queue< pair<pair<ll, int>, int> >PQ;
		PQ.push({{0, num[1]}, 0});
		for(int c=1;c<=2 * N + 3;c++) vis[c] = 0;
		while(PQ.size()) {
			pair<pair<ll, int>, int> x = PQ.top();
			PQ.pop();
			if(vis[2 * x.fi.se + x.se]) continue;
		//	cout<<"here; "<<x.se<<" "<<x.fi.se<<" "<<x.fi.fi<<endl;
			ans[x.fi.se] = min(ans[x.fi.se], -x.fi.fi);
			vis[2 * x.fi.se + x.se] = 1;
			
			for(auto p : edge[x.fi.se]) {
				if(x.fi.se != num[1] && stop[x.fi.se] && x.se == 0 && !vis[2 * p + 1]) PQ.push({{x.fi.fi - 1ll * ds[0][i] - 1ll, p}, -1});
				else if(x.fi.se != num[1] && stop[x.fi.se] && x.se == -1 && !vis[2 * p + 1]) PQ.push({{x.fi.fi - 1ll * i - 1ll, p}, -1});
				else if(!vis[2 * p + x.se])PQ.push({{x.fi.fi - 1ll,  p},x.se});
			}
		}
	}
	for(int i=1;i<=N;i++) cout<<ans[i]<<"\n";
}

详细

Subtask #1:

score: 0
Time Limit Exceeded

Test #1:

score: 3
Accepted
time: 1151ms
memory: 6628kb

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: 0
Time Limit Exceeded

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:


result:


Subtask #2:

score: 0
Time Limit Exceeded

Test #5:

score: 7
Accepted
time: 2630ms
memory: 5124kb

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:

ok 3000 lines

Test #6:

score: 0
Time Limit Exceeded

input:

30000 30000 30000
15802 26734
1581 27129
4313 12830
7001 28197
5489 10268
11838 19275
11260 21410
3519 29279
932 23073
8888 28355
17227 29224
1060 5702
20326 25420
1598 14082
15716 27167
4982 19730
4497 8783
15068 19181
7588 9083
4816 21808
15694 24819
4716 27198
14003 15119
5397 11717
3612 20613
24...

output:


result:


Subtask #3:

score: 0
Time Limit Exceeded

Test #13:

score: 7
Accepted
time: 1543ms
memory: 5904kb

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
718
974
1389
588
1322
215
670
9
870
488
375
195
1102
149
1373
944
303
508
1217
19
920
646
699
713
1152
1247
555
751
80
50
584
1361
149
921
140
1183
989
667
455
198
180
813
472
71
112
169
331
600
666
31
860
145
1090
207
496
654
825
1330
278
112
690
1152
885
1412
94
96
771
132
...

result:

ok 3000 lines

Test #14:

score: 0
Time Limit Exceeded

input:

30000 30000 30000
5947 19048
4004 18741
10068 24221
13216 23775
14185 17633
2653 21744
87 19566
5657 19635
24673 28265
5039 14021
8019 20341
7620 25285
6719 8806
15262 25748
14231 28690
21585 29569
27254 27866
12665 29102
2884 11669
2014 11831
1927 26375
9676 21506
2114 28403
18249 27263
4937 8497
6...

output:


result:


Subtask #4:

score: 0
Wrong Answer

Test #23:

score: 19
Accepted
time: 5ms
memory: 6604kb

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: 6ms
memory: 5224kb

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:

71
71
73
72
58
44
83
58
84
78
57
26
74
33
20
93
42
73
98
63
79
50
67
42
87
101
63
56
89
17
29
87
97
40
91
96
44
41
75
93
22
13
88
89
19
40
71
70
15
89
81
89
64
82
66
96
28
80
103
56
41
17
99
17
61
83
92
23
48
105
50
53
77
71
72
79
85
54
25
15
96
61
73
30
64
58
10
66
80
59
59
82
66
70
75
28
89
70
84
...

result:

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

Subtask #5:

score: 0
Wrong Answer

Test #44:

score: 0
Wrong Answer
time: 74ms
memory: 8112kb

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:

114
120
159
152
68
38
72
118
129
123
155
95
61
164
142
103
72
58
122
97
89
73
64
57
174
59
67
114
111
99
122
60
100
61
20
112
104
103
114
168
113
70
104
93
105
49
118
119
111
177
91
88
87
102
162
146
94
178
108
87
98
130
90
152
41
71
61
145
77
79
94
70
133
80
89
124
122
105
67
38
133
173
118
126
85
...

result:

wrong answer 814th lines differ - expected: '183', found: '138'

Subtask #6:

score: 0
Skipped

Dependency #5:

0%

Subtask #7:

score: 0
Skipped

Dependency #4:

0%

Subtask #8:

score: 0
Skipped

Dependency #1:

0%