QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#875750#10023. Kangaroo On Graphasdfsdf#AC ✓565ms100976kbC++232.5kb2025-01-30 12:08:292025-01-30 12:08:29

Judging History

This is the latest submission verdict.

  • [2025-01-30 12:08:29]
  • Judged
  • Verdict: AC
  • Time: 565ms
  • Memory: 100976kb
  • [2025-01-30 12:08:29]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
#define MOD 998244353
#define MAX 6020202
map<pii, int> mp;
pii edges[MAX];
int W[MAX];
vector<int> nxt[MAX];
vector<int> gph[MAX];
vector<pii> adj[MAX];
int eloc[MAX];
int cnt;
int ch[MAX][2];
int init(int v, int s, int e, int loc) {
	if (s == e) {
		adj[loc].emplace_back(gph[v][s], W[gph[v][s]]);
		return loc;
	}
	int m = s + e >> 1;
	adj[loc].emplace_back(ch[loc][0] = init(v, s, m, ++cnt), 0);
	adj[loc].emplace_back(ch[loc][1] = init(v, m + 1, e, ++cnt), 0);
	return loc;
}
void add(int v, int edge, int s, int e, int l, int r, int loc) {
	if (e < l || r < s) return;
	if (l <= s && e <= r) {
		adj[edge].emplace_back(loc, 0);
		return;
	}
	int m = s + e >> 1;
	add(v, edge, s, m, l, r, ch[loc][0]);
	add(v, edge, m + 1, e, l, r, ch[loc][1]);
}
ll dist[MAX];
int vis[MAX];
signed main() {
	ios::sync_with_stdio(false), cin.tie(0);
	int N, M;
	cin >> N >> M;
	int i, a, b, c;
	for (i = 1; i <= M; i++) {
		cin >> a >> b;
		eloc[i] = gph[a].size();
		gph[a].push_back(i);
		edges[i] = pii(a, b);
		cin >> W[i];
		mp[pii(a, b)] = i;
	}
	cnt = N + M;
	for (i = 1; i <= N; i++) {
		if (gph[i].empty()) continue;
		int d = gph[i].size();
		init(i, 0, d - 1, i + M);
	}
	int K;
	cin >> K;
	for (i = 1; i <= K; i++) {
		cin >> a >> b >> c;
		int e1, e2;
		e1 = mp[pii(a, b)];
		e2 = mp[pii(b, c)];
		nxt[e1].push_back(eloc[e2]);
	}
	for (i = 1; i <= M; i++) {
		int nv = edges[i].second;
		if (nxt[i].empty()) adj[i].emplace_back(nv + M, 0);
		else {
			sort(nxt[i].begin(), nxt[i].end());
			int p = -1;
			for (auto l : nxt[i]) {
				if (p + 1 < l) add(nv, i, 0, (int)gph[nv].size() - 1, p + 1, l - 1, nv + M);
				p = l;
			}
			if (p + 1 < gph[nv].size()) add(nv, i, 0, (int)gph[nv].size() - 1, p + 1, (int)gph[nv].size() - 1, nv + M);
		}
	}
	for (i = 1; i <= cnt; i++) dist[i] = 1e18;
	typedef pair<ll, int> pli;
	priority_queue<pli, vector<pli>, greater<pli>> pq;
	for (i = 1; i <= M; i++) {
		if (edges[i].first == 1) {
			dist[i] = W[i];
			pq.emplace(W[i], i);
		}
	}
	while (pq.size()) {
		auto t = pq.top().second;
		pq.pop();
		if (vis[t]) continue;
		vis[t] = 1;
		for (auto& [v, w] : adj[t]) {
			if (dist[v] > dist[t] + w) {
				dist[v] = dist[t] + w;
				pq.emplace(dist[v], v);
			}
		}
	}
	ll ans = 1e18;
	for (i = 1; i <= M; i++) if (edges[i].second == N) ans = min(ans, dist[i]);
	if (ans <= 1e17) cout << ans;
	else cout << -1;
}

详细

Test #1:

score: 100
Accepted
time: 17ms
memory: 14020kb

input:

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

output:

6

result:

ok answer is '6'

Test #2:

score: 0
Accepted
time: 16ms
memory: 13836kb

input:

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

output:

9

result:

ok answer is '9'

Test #3:

score: 0
Accepted
time: 17ms
memory: 12024kb

input:

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

output:

-1

result:

ok answer is '-1'

Test #4:

score: 0
Accepted
time: 371ms
memory: 75000kb

input:

150001 200000
27259 27261 590380540
62249 62251 781612972
142049 142051 869916317
21557 21559 882107330
43939 43940 906862353
13835 13837 750774554
85358 85360 468362257
42743 42745 653927711
25898 25900 427788655
9457 9459 600827054
80848 80850 853444790
84751 84753 490887034
142664 142666 26367087...

output:

49897302829745

result:

ok answer is '49897302829745'

Test #5:

score: 0
Accepted
time: 226ms
memory: 54508kb

input:

100000 133332
94634 94636 273916875
49405 49406 7705623
46579 46580 613041575
97379 97381 277397584
86487 86488 446200817
7618 7619 82676219
79763 79765 265220769
49775 49777 175656241
50253 50254 509685344
64341 64342 642442592
81789 81790 7720070
59791 59792 190513484
92339 92341 839361674
83696 8...

output:

33346820813893

result:

ok answer is '33346820813893'

Test #6:

score: 0
Accepted
time: 368ms
memory: 75000kb

input:

149998 199996
84723 84724 160637000
143893 143894 382237567
128673 128674 229111160
87169 87171 186600504
103309 103311 415954689
65442 65443 895315674
71846 71848 882228834
69164 69166 953310617
30360 30361 433585279
126633 126634 77552169
102808 102809 858368884
123704 123706 492180159
142672 1426...

output:

49784186835101

result:

ok answer is '49784186835101'

Test #7:

score: 0
Accepted
time: 99ms
memory: 20516kb

input:

10023 20040
1 1646 1646
1 4408 4408
1 4109 4109
4019 10002 4019
1 2876 2876
1 8613 8613
1 2766 2766
1537 10002 1537
1 3584 3584
1 696 696
1 5648 5648
8667 10002 8667
1 9008 9008
6467 10002 6467
1 1231 1231
1 4290 4290
7054 10002 7054
7021 10002 7021
10007 10023 10007
1 4912 4912
1 5670 5670
2352 100...

output:

40008

result:

ok answer is '40008'

Test #8:

score: 0
Accepted
time: 56ms
memory: 21124kb

input:

10023 20040
1339 10023 1339
12 286 286
1407 10023 1407
6795 10023 6795
6033 10023 6033
5577 10023 5577
6788 10023 6788
4065 10023 4065
3640 10023 3640
12 4354 4354
12 6039 6039
84 10023 84
12 1057 1057
7500 10023 7500
2620 10023 2620
4670 10023 4670
12 2987 2987
1628 10023 1628
1954 10023 1954
12 79...

output:

20048

result:

ok answer is '20048'

Test #9:

score: 0
Accepted
time: 74ms
memory: 15524kb

input:

2003 4000
1002 1300 1000000000
1 881 881
1050 2003 1000000000
310 1002 310
52 1002 52
223 1002 223
1002 1151 1000000000
1002 1619 1000000000
1109 2003 1000000000
1 815 815
1 565 565
80 1002 80
1654 2003 1000000000
1556 2003 1000000000
1 887 887
1 10 10
1349 2003 1000000000
1002 1478 1000000000
1071 ...

output:

2000000404

result:

ok answer is '2000000404'

Test #10:

score: 0
Accepted
time: 565ms
memory: 98816kb

input:

100001 199980
13628 20001 947212974
50001 56304 751361163
79801 80001 89669673
13146 20001 452181224
70001 76260 180984182
61744 70001 506205944
86270 90001 658175650
70001 73957 985790752
44630 50001 980133138
40001 45798 471804838
1 5816 117814016
49260 50001 539123895
88564 90001 885508707
99971 ...

output:

108632311

result:

ok answer is '108632311'

Test #11:

score: 0
Accepted
time: 554ms
memory: 100976kb

input:

100001 199980
54252 60001 931849357
2308 10001 78090353
50001 58586 245223037
20001 20280 156610358
92845 100001 296356002
80001 88077 358953339
66323 70001 738684727
20001 25613 82068155
10001 12254 147861325
50001 56652 949175371
99828 100001 488638169
70001 78139 202967618
5385 10001 362412460
72...

output:

125777572

result:

ok answer is '125777572'

Test #12:

score: 0
Accepted
time: 394ms
memory: 88484kb

input:

90001 179994
7887 30001 421639474
66004 90001 10233163
30001 46134 765869589
30001 40760 413675979
30001 53470 828769642
60001 84224 414141641
60001 62744 575784125
1 28822 978322175
24031 30001 588283135
60001 64067 702530095
60001 61230 306565055
29049 30001 474591288
60001 70395 531904458
50047 6...

output:

27558763

result:

ok answer is '27558763'

Test #13:

score: 0
Accepted
time: 176ms
memory: 89700kb

input:

146390 199992
1 519 969257113
1 540 485291313
1 565 879692866
1 665 411893045
1 1096 62247035
1 2101 228419818
1 2218 44685509
1 2458 351787052
1 2689 3864678
1 2793 783000299
1 2854 850215154
1 3188 86090097
1 3502 556366245
1 3968 535656281
1 4555 579324859
1 4679 85194374
1 5579 167727590
1 5841 ...

output:

175321731

result:

ok answer is '175321731'

Test #14:

score: 0
Accepted
time: 173ms
memory: 95624kb

input:

179212 199907
1 274 540983730
1 1731 499296920
1 2478 609417385
1 2574 979237456
1 4296 599435756
1 4570 311092290
1 4721 507400255
1 4895 275152948
1 5615 277331821
1 5703 583935806
1 5925 83056115
1 6302 672932
1 6391 13251295
1 6472 364513918
1 6751 238436572
1 7102 586342973
1 7855 291103278
1 8...

output:

331966516

result:

ok answer is '331966516'

Test #15:

score: 0
Accepted
time: 174ms
memory: 91520kb

input:

105443 199997
1 654 378859616
1 804 978808207
1 1163 211995422
1 1857 408405618
1 3240 35746364
1 3341 561766152
1 3412 214704933
1 3531 967740481
1 3651 804196493
1 3673 441493099
1 4269 240983949
1 4279 345372367
1 4336 888893882
1 4506 254258197
1 4552 170136458
1 4644 431794603
1 5363 798633567
...

output:

551278205

result:

ok answer is '551278205'

Test #16:

score: 0
Accepted
time: 168ms
memory: 81568kb

input:

124760 199900
1 323 837429950
1 610 296707117
1 880 340324842
1 2773 160463640
1 3011 512471708
1 3186 628772897
1 3686 21936922
1 3766 191852555
1 5782 304919946
1 6372 113987218
1 6921 118974582
1 7373 660306168
1 7518 784540825
1 7805 805046130
1 7868 471107812
1 7949 393202319
1 8004 635270091
1...

output:

-1

result:

ok answer is '-1'

Test #17:

score: 0
Accepted
time: 172ms
memory: 83348kb

input:

105114 199946
1 131 929388780
1 368 701893952
1 415 495315074
1 639 408904688
1 718 875318501
1 753 786872885
1 1194 266178665
1 1311 382252026
1 1497 289950635
1 1527 451663510
1 1724 485963863
1 2225 614478012
1 2290 626124045
1 2388 320028154
1 2426 949359943
1 2547 491383296
1 2592 158038945
1 2...

output:

70338809

result:

ok answer is '70338809'

Test #18:

score: 0
Accepted
time: 17ms
memory: 7784kb

input:

200000 0
0

output:

-1

result:

ok answer is '-1'

Test #19:

score: 0
Accepted
time: 16ms
memory: 11892kb

input:

3 2
1 2 1
2 3 1
1
1 2 3

output:

-1

result:

ok answer is '-1'