QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#692443#5439. Meet in the MiddleraywuTL 2971ms17024kbC++142.0kb2024-10-31 14:30:372024-10-31 14:31:08

Judging History

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

  • [2024-10-31 14:31:08]
  • 评测
  • 测评结果:TL
  • 用时:2971ms
  • 内存:17024kb
  • [2024-10-31 14:30:37]
  • 提交

answer

#include <bits/stdc++.h>
#define _for(i, a, b)  for (int i = (a); i <= (b); i ++ )
#define _all(i, a, b)  for (int i = (a); i >= (b); i -- )
#define ll long long
#define P pair<int, int>
#define F first
#define S second
#define mp make_pair
#define pb push_back
using namespace std;
const int N = 1e5 + 5;
int n, q, pos, vis[N]; ll ans, x; mt19937 rnd(time(0)); vector<int> Ans;
struct Tree {
	int dfn_cnt, a[N], rk[N], dep[N], fa[N], dfn[N], top[N], sz[N], son[N]; vector<P > G[N]; ll f[N];
	void dfs1(int u) {
		sz[u] = 1, son[u] = - 1;
		for (P v : G[u])  if (v.F ^ fa[u]) {
			dep[v.F] = dep[u] + 1, fa[v.F] = u, f[v.F] = f[u] + v.S, dfs1(v.F), sz[u] += sz[v.F];
			if (son[u] == - 1 || sz[v.F] > sz[son[u]])  son[u] = v.F;
		}
	}
	void dfs2(int u, int Top) {
		dfn[u] = ++ dfn_cnt, rk[dfn_cnt] = u, top[u] = Top;
		if (son[u] == -1)  return ;
		dfs2(son[u], Top);
		for (P v : G[u])  if (v.F ^ fa[u] && v.F ^ son[u])  dfs2(v.F, v.F);
	}
	inline int lca(int u, int v) {
		int U = top[u], V = top[v];
		while (U ^ V) {
			if (dep[U] >= dep[V])  u = fa[U];
			else  v = fa[V];
			U = top[u], V = top[v];
		}
		return (dep[u] < dep[v] ? u : v);
	}
	inline ll dist(int u, int v) { return f[u] + f[v] - 2ll * f[lca(u, v)]; }
} T[2];
int main() {
	ios :: sync_with_stdio(false), cin.tie(0), cout.tie(0);
	cin >> n >> q, Ans.clear(), T[0].dfn_cnt = T[1].dfn_cnt = 0; int u, v, w;
	_for (o, 0, 1)  _for (i, 1, n)  T[o].G[i].clear(), vis[i] = 0;
	_for (o, 0, 1)  _for (i, 2, n)  cin >> u >> v >> w, T[o].G[u].pb(mp(v, w)), T[o].G[v].pb(mp(u, w));
	_for (o, 0, 1)  T[o].dfs1(1), T[o].dfs2(1, 1);
	_for (_, 1, 20000) {
		u = rnd() % n + 1, v = rnd() % n + 1, ans = pos = 0;
		_for (i, 1, n)  if ((x = T[0].dist(u, i) + T[1].dist(v, i)) > ans)  ans = x, pos = i;
		if (! vis[pos])  Ans.push_back(pos), vis[pos] = 1;
		if (Ans.size() == 4)  break;
	}
	while (q -- ) {
		cin >> u >> v, ans = 0;
		for (int i : Ans)  ans = max(ans, T[0].dist(u, i) + T[1].dist(v, i));
		cout << ans << "\n";
	}
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 14248kb

input:

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

output:

6
4
5
3

result:

ok 4 number(s): "6 4 5 3"

Test #2:

score: 0
Accepted
time: 3ms
memory: 14268kb

input:

2 1
1 2 1
1 2 1
1 1

output:

2

result:

ok 1 number(s): "2"

Test #3:

score: 0
Accepted
time: 3ms
memory: 14108kb

input:

2 1
1 2 1
1 2 1
1 2

output:

1

result:

ok 1 number(s): "1"

Test #4:

score: 0
Accepted
time: 19ms
memory: 14844kb

input:

10000 50000
8101 5996 108427744
5996 7605 870838849
5996 5599 603303696
8101 3006 339377417
8101 6463 442516687
6463 5560 109174079
5560 4063 127596224
3006 1682 947915262
5996 1986 130416311
6463 5455 279771516
6463 2634 516688796
4063 3034 217886863
7605 5092 742375061
5599 2266 193804402
5092 140...

output:

647838384844
626539793176
514273941704
637066393138
472546379596
645842915960
641537859258
573604504956
644081575470
803875451466
674370549986
734764046916
744862815441
763778393516
553499885160
526743824759
610373719514
689550247042
549161302822
726811438160
653134244120
666761991962
701575393972
6...

result:

ok 50000 numbers

Test #5:

score: 0
Accepted
time: 27ms
memory: 15016kb

input:

10000 50000
5314 8843 137901358
5314 4153 459134340
5314 8667 933926892
4153 6504 330487798
4153 8880 750362377
4153 5990 874275912
4153 546 563436331
5990 6216 902348875
8843 3101 669215553
6216 8138 732343176
8667 8675 581114294
6504 7416 127778711
546 4239 282695908
6504 9455 549237168
5314 8340 ...

output:

464564968641
331633000004
565299667784
484694871646
570451097836
417492802442
372302349684
638725688107
386235986078
355738655551
462027769535
558485994764
524714144289
450157947013
432701214095
494566741391
529031758638
637683369382
415646847933
344894296260
390294136162
527685175763
575151290175
3...

result:

ok 50000 numbers

Test #6:

score: 0
Accepted
time: 22ms
memory: 15628kb

input:

10000 50000
2808 2490 757309564
2808 9601 312271047
2808 4046 119325897
2808 4894 466822371
4894 1507 498399554
2490 5982 84088145
9601 1251 149019541
2808 6681 416590999
2808 6583 357757899
1251 3192 889947539
6583 9762 350572496
6681 22 597479070
5982 8744 263208242
8744 5281 49894126
1507 8806 30...

output:

1501072697023
2058806276380
2017086500812
2044250452467
1543567245539
1695101693278
1765462307870
2576423082091
2302805133490
2090282734929
2375783476943
1954788661090
2056530503168
2453153202726
1978028047409
2106220371212
2210163378358
2015714406862
1555876274751
2122832986951
2102262624814
169085...

result:

ok 50000 numbers

Test #7:

score: 0
Accepted
time: 19ms
memory: 17024kb

input:

10000 50000
4064 7188 81750473
7188 8466 310631946
8466 2276 154981798
2276 7347 162965456
7188 464 806245243
464 2250 849189978
8466 641 734602751
8466 9246 225800419
4064 5267 191524437
2276 5292 192776095
2276 9036 414997994
9246 5470 362146726
2250 473 98496385
4064 7726 700294189
473 9503 42824...

output:

3589143478793
5241855728342
3397106617685
3432843859461
4544481241003
3649934075137
3020107625030
3297847713344
3894730366667
3030559097282
4824131552194
4821302024170
4471510161493
3291683748595
4954639576578
2961243269520
3659899432127
3421183608349
5262802614761
4408705330639
5203984107670
500158...

result:

ok 50000 numbers

Test #8:

score: 0
Accepted
time: 171ms
memory: 15648kb

input:

10000 50000
8676 4714 406191383
8676 5040 603960140
5040 9715 635348098
4714 9483 594267326
9483 5451 409058229
8676 8913 909259106
9715 1399 320185961
9715 4857 180234031
4714 8888 585099487
5040 1244 645347755
5451 7736 479423492
9483 1038 272038574
1399 3970 638817231
8888 3314 55726955
8888 2295...

output:

447424387353
491327570749
614052040822
384218910068
429859933145
356174725430
609432604118
465420084327
472632020898
382647454960
343751681021
441874503695
463199624732
610943875286
563031986601
566780763247
346991783125
601234775562
619765985074
357316826763
495874578271
526431260851
331681020073
4...

result:

ok 50000 numbers

Test #9:

score: 0
Accepted
time: 2971ms
memory: 14952kb

input:

10000 50000
30 8765 730632293
8765 4245 897288335
30 4974 965971295
4974 9464 585377707
9464 744 157095406
744 6387 969328235
744 235 905769171
744 912 989443452
744 1341 273641834
744 9933 802952118
4974 8348 248881694
8765 9127 36706230
912 6136 324362270
4974 8517 411159721
8348 1941 672019024
94...

output:

260285187513
334448828465
448073136303
349497881882
360969017248
402078622370
390257279014
308648100196
320994952264
289449337583
393159064851
453034865550
283828471834
446349617896
380894281657
408838602752
363824724502
420964873388
362606539223
391080537186
304570333981
245848347318
310973758007
3...

result:

ok 50000 numbers

Test #10:

score: 0
Accepted
time: 124ms
memory: 15752kb

input:

10000 50000
2152 8278 350040498
2152 3058 895649234
3058 2264 151370300
8278 6118 576488088
8278 7313 464941095
3058 6966 884173172
6966 9779 786319677
9779 9796 943877064
6118 929 517473780
6118 2651 550491074
7313 662 313307192
7313 8043 506406589
7313 1698 864683116
6118 5060 766592488
6966 1903 ...

output:

652477746679
597325264627
539318490039
597048004752
421646977029
649309274459
506349020540
429554460108
462828559625
593933122751
543584884281
652286846854
654020863570
717938057245
431237695994
601883634488
731084254857
588856926225
399175030875
575410680840
526320427336
494819850806
529049784844
5...

result:

ok 50000 numbers

Test #11:

score: 0
Accepted
time: 20ms
memory: 15092kb

input:

10000 50000
7747 7582 379514112
7582 4607 188977429
7582 5317 187026200
7747 8600 712822661
8600 4262 212978273
7747 827 649275004
827 8014 76935591
7747 6641 753086484
7582 8582 206016126
8014 8460 708095438
8014 9211 377732689
8582 4450 416298437
827 9208 699971259
9208 6823 416992550
8582 186 770...

output:

746737735180
498470031337
630778245801
714337715073
566315588400
809241414480
668680437815
575990359534
612421079786
631355089285
534254563162
566879359756
667087033615
650377712872
669587743650
611030906118
593248384501
735077133684
585253655611
595113935966
519628983099
603281284099
529926712130
5...

result:

ok 50000 numbers

Test #12:

score: 0
Accepted
time: 24ms
memory: 15148kb

input:

10000 50000
3472 122 628742395
3472 3867 379635964
3867 1902 749838600
3867 7438 305533780
122 6633 278565996
122 1661 208291710
7438 3819 677928429
1902 7425 657683150
1661 5239 676247552
1902 2756 448261111
7438 7365 97063037
3819 6763 371040229
6633 8865 356148629
6763 5581 863369674
6633 1551 46...

output:

608697605604
482134269787
577721966634
628074778968
445000575297
484814952220
511586460160
374153126368
469519128844
602443844531
619658782918
385417337773
345965815878
620132139546
609655051154
537845187251
622122602447
436588599524
531403283302
587074749895
441226010189
421564270566
406700017163
5...

result:

ok 50000 numbers

Test #13:

score: 0
Accepted
time: 31ms
memory: 15276kb

input:

10000 50000
1160 9231 559787863
9231 4770 299521320
9231 9192 876373929
4770 3107 498755345
1160 5830 724175215
3107 9464 281278611
5830 3611 15139105
4770 7601 642740087
9464 910 538577221
9464 8134 554493711
7601 5225 259081456
9192 4493 741155925
5225 7756 789054604
5225 9044 160953940
7601 6104 ...

output:

44163199908
36544889589
45890256673
36776414195
37333219129
39650732470
43389306319
38148496085
42684423989
37470526473
42398992970
40710607327
42271798904
40981602830
42083787825
41411720865
39511748870
39133821656
42107800923
40131700757
38159799832
39161288828
43514631246
38415055107
37202416831
...

result:

ok 50000 numbers

Test #14:

score: 0
Accepted
time: 15ms
memory: 15128kb

input:

10000 50000
4350 9200 67344024
4350 3516 652031480
9200 9124 852386373
3516 3291 174252855
9124 6162 531615996
3516 3512 591430394
9124 1486 34243545
9200 6098 389999654
6162 3831 371706900
3512 4570 438513693
6162 312 142582166
3512 2336 718583156
4570 7409 610288335
2336 7420 1537001
7420 7842 827...

output:

1281632463885
1210271183079
1237017380491
895833426340
1283280064455
942224768023
892689065199
798697911014
751216197267
758455784557
1141824774281
820909870575
1014030803803
957938689064
1219651503682
771983156874
1178424399518
788435609430
1077287342681
1093062283731
946704599027
893784573061
1275...

result:

ok 50000 numbers

Test #15:

score: 0
Accepted
time: 20ms
memory: 13320kb

input:

10000 50000
9863 2086 776561351
2086 3631 126823773
9863 3392 474209454
3631 9001 149307847
9001 9522 263109666
3392 5761 187746709
9001 3767 870963783
3631 3788 726791
9522 4896 223271095
5761 1160 858678197
5761 543 58975325
3767 9995 875487770
1160 7361 101433507
4896 8325 954009430
8325 3351 894...

output:

3639977233620
3530907756332
2675379129344
4448022048643
2573190330483
4499414931784
3266309481456
3096703943537
2626858162069
3705044120135
3214988142418
3607045075418
2855013843207
4100248201012
2944552371007
3467914981358
4012578656847
4011860831951
5010047454262
4258401519515
4612650790910
498761...

result:

ok 50000 numbers

Test #16:

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

input:

10000 50000
4049 3217 948325921
4049 5052 335875847
5052 1077 805501667
1077 5617 791326096
3217 6795 341938001
1077 1687 296345105
6795 4846 592548551
5052 605 480047794
1687 1641 278347154
5617 4357 204297995
605 314 916793543
605 2278 379707422
2278 1593 345641808
1687 8644 903411591
1593 4760 76...

output:

22692370014
26671995767
23223650964
25037938894
24746389474
23697688458
23151041959
23816855885
23838338206
24834553266
26196330065
24533366219
26308807100
27248674922
25552842773
26570165114
22870797629
23557706389
26691697989
25265417363
24630757806
26415052596
25655335960
24347193370
26001962880
...

result:

ok 50000 numbers

Test #17:

score: -100
Time Limit Exceeded

input:

10000 50000
6523 4998 683131495
4998 935 871371995
6523 9691 163318078
9691 8916 578451344
9691 9874 961103371
8916 685 208189809
685 8871 368173207
8916 6734 382636596
685 5383 69823504
8871 5902 340803834
4998 587 182084912
935 8296 327702300
5383 4787 216764061
5383 2603 471182122
587 7372 923681...

output:


result: