QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#402238#6306. Chase GamesususyWA 1ms6648kbC++142.3kb2024-04-30 09:44:312024-04-30 09:44:32

Judging History

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

  • [2024-04-30 09:44:32]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:6648kb
  • [2024-04-30 09:44:31]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const ll N = 1e5 + 8, M = 2e5 + 8, INF = 0x3f3f3f3f3f3f3f3fll;
ll n, m, k, d;
ll head[N], nxt[M * 2], ver[M * 2], tot;
bitset<N> vis;
ll val[N], dis[N]/* , dn[N] */;

void add(ll u, ll v) { nxt[++tot] = head[u], head[u] = tot, ver[tot] = v; }

void bfs1(ll s)
{
	vis.reset();
	queue<ll> q;
	val[s] = d;
	if(d == 1)
		return;
	q.push(s), vis[s] = true;
	while(!q.empty())
	{
		ll u = q.front(), v;
		q.pop();
		for(ll i = head[u]; i; i = nxt[i])
			if(!vis[v = ver[i]])
			{
				val[v] = val[u] - 1;
				if(val[v] > 1)
					vis[v] = true, q.push(v);
			}
	}
}

void bfs2(ll s)
{
	memset(dis, 0x3f, sizeof(dis));
	if(val[s])
		return;
	queue<ll> q;
	q.push(s), vis[s] = true;
	dis[s] = 0;
	while(!q.empty())
	{
		ll u = q.front(), v;
		q.pop();
		for(ll i = head[u]; i; i = nxt[i])
			if(!vis[v = ver[i]])
			{
				dis[v] = dis[u] + 1;
				vis[v] = true, q.push(v);
			}
	}
}

/* void bfs3(ll s)
{
	vis.reset();
	queue<ll> q;
	q.push(s), vis[s] = true;
	dn[s] = 0;
	while(!q.empty())
	{
		ll u = q.front(), v;
		q.pop();
		for(ll i = head[u]; i; i = nxt[i])
			if(!vis[v = ver[i]])
			{
				dn[v] = dn[u] + 1;
				vis[v] = true, q.push(v);
			}
	}
} */

constexpr ll calc(ll x) { return x * (x + 1) >> 1; }

void dijkstra()
{
	priority_queue<pair<ll, ll>, vector<pair<ll, ll>>, greater<pair<ll, ll>>> q;
	const ll t = calc(d);
	if(val[n])
	{
		memset(dis, 0x3f, sizeof(dis));
		q.push({dis[n] = 0, n});
	}
	else
	{
		for(ll i = 1; i <= n; i++)
			if(val[i] == 1 && vis[i])
				q.push({(dis[i] = (dis[i] / d + 1) * t - calc(d - dis[i] % d)), i});
			else
				dis[i] = INF;
	}
	vis.reset();
	while(!q.empty())
	{
		ll u = q.top().second, v;
		q.pop();
		if(vis[u])
			continue;
		vis[u] = true;
		for(ll i = head[u]; i; i = nxt[i])
			if(!vis[v = ver[i]] && dis[u] + val[u] < dis[v])
			{
				dis[v] = dis[u] + val[u];
				if(val[v])
					q.push({dis[v], v});
			}
	}
}

int main()
{
	scanf("%lld%lld%lld%lld", &n, &m, &k, &d);
	const ll t = calc(d);
	for(ll i = 1, u, v; i <= m; i++)
		scanf("%lld%lld", &u, &v), add(u, v), add(v, u);
	bfs1(k);
	bfs2(n);
	ll res = (dis[1] == INF) ? INF : ((dis[1] / d + 1) * t - calc(d - dis[1] % d));
	dijkstra();
	printf("%lld\n", min(dis[1], res));
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 6648kb

input:

5 5 3 1
1 2
2 4
4 5
1 3
3 5

output:

2

result:

ok 1 number(s): "2"

Test #2:

score: 0
Accepted
time: 1ms
memory: 4872kb

input:

13 17 12 3
1 2
2 3
3 4
4 13
5 13
7 8
7 9
7 10
7 11
7 6
12 7
1 8
8 9
9 10
10 11
11 6
6 13

output:

7

result:

ok 1 number(s): "7"

Test #3:

score: 0
Accepted
time: 1ms
memory: 4548kb

input:

10 9 4 1
4 3
1 2
7 6
6 5
8 9
9 10
5 4
8 7
3 2

output:

9

result:

ok 1 number(s): "9"

Test #4:

score: 0
Accepted
time: 1ms
memory: 4612kb

input:

10 20 9 1
9 5
2 9
4 5
10 5
7 3
1 8
7 1
7 5
3 4
3 1
7 8
3 8
9 3
10 6
9 1
1 6
8 5
6 2
1 10
2 1

output:

1

result:

ok 1 number(s): "1"

Test #5:

score: 0
Accepted
time: 0ms
memory: 4600kb

input:

10 20 3 1
1 4
6 7
5 4
5 3
2 1
8 1
7 8
2 6
2 4
4 8
9 5
1 10
7 4
5 8
4 10
2 5
6 10
4 6
3 7
1 3

output:

1

result:

ok 1 number(s): "1"

Test #6:

score: 0
Accepted
time: 1ms
memory: 4872kb

input:

10 20 4 1
2 7
6 4
2 3
2 4
6 5
8 5
6 7
10 2
3 10
1 8
3 9
3 7
1 7
5 1
6 1
3 4
2 1
5 2
9 2
9 10

output:

2

result:

ok 1 number(s): "2"

Test #7:

score: 0
Accepted
time: 0ms
memory: 4676kb

input:

10 20 1 10
10 9
2 5
7 8
7 10
10 8
8 9
5 6
3 1
6 4
7 9
2 3
3 6
2 1
8 6
5 8
7 4
4 3
2 4
4 1
9 6

output:

24

result:

ok 1 number(s): "24"

Test #8:

score: 0
Accepted
time: 1ms
memory: 4596kb

input:

10 20 6 10
5 4
1 7
6 8
1 2
6 1
5 2
5 1
2 4
5 3
3 2
10 3
9 10
7 9
3 1
5 9
1 8
8 3
8 7
6 4
2 7

output:

15

result:

ok 1 number(s): "15"

Test #9:

score: 0
Accepted
time: 0ms
memory: 4708kb

input:

1000 999 387 1
505 506
314 313
410 411
680 681
884 885
491 492
60 59
343 342
396 397
880 881
954 953
833 834
53 54
284 283
794 793
241 240
347 348
89 88
787 786
551 550
673 672
56 57
683 682
168 169
814 813
726 725
877 876
981 982
799 800
228 227
568 569
387 386
211 212
30 29
298 299
514 515
561 562...

output:

999

result:

ok 1 number(s): "999"

Test #10:

score: 0
Accepted
time: 1ms
memory: 4752kb

input:

1000 2000 879 1
357 547
380 111
973 995
179 906
478 508
463 822
687 488
70 40
330 202
189 303
103 39
510 743
1000 236
311 695
29 338
156 77
299 249
289 275
419 57
352 704
739 825
676 194
783 828
769 169
270 325
354 29
145 197
309 461
456 461
997 816
478 387
117 626
931 803
445 91
730 160
1000 322
25...

output:

3

result:

ok 1 number(s): "3"

Test #11:

score: 0
Accepted
time: 1ms
memory: 4696kb

input:

1000 2000 603 228
10 11
885 884
217 218
626 629
559 562
305 302
328 326
809 807
176 179
553 554
435 432
641 639
761 763
486 484
376 374
261 260
515 512
224 222
413 414
33 34
468 470
976 979
461 459
491 490
272 275
528 526
393 396
673 676
45 42
677 676
247 249
938 937
200 203
649 647
303 304
457 455
...

output:

49209

result:

ok 1 number(s): "49209"

Test #12:

score: -100
Wrong Answer
time: 1ms
memory: 4696kb

input:

1000 2000 943 363
702 699
676 678
81 82
643 646
439 436
12 11
665 663
288 289
143 141
476 478
559 558
251 250
845 842
912 911
818 816
559 557
69 68
448 450
693 696
527 524
323 322
207 208
436 434
39 38
756 759
721 723
785 787
719 718
688 687
343 345
825 822
834 833
792 791
475 476
777 779
975 972
32...

output:

4557430888798830399

result:

wrong answer 1st numbers differ - expected: '74162', found: '4557430888798830399'