QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#360477#6350. MITppipTL 3735ms46288kbC++144.3kb2024-03-21 20:02:572024-03-21 20:02:58

Judging History

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

  • [2024-03-21 20:02:58]
  • 评测
  • 测评结果:TL
  • 用时:3735ms
  • 内存:46288kb
  • [2024-03-21 20:02:57]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
// #define int LL
using LL=long long;
constexpr int N(1e6);
int n;
int fa[N+5],dep[N+5];
int L[N+5],R[N+5],fz[N+5];
bool les(int x,int y) { return dep[fz[x]]>dep[fz[y]]; }
int Max(int x,int y) { return les(y,x)?x:y; }
void chkMax(int &x,int y) { x=Max(x,y); }
struct RMQ {
	int bs;
	int st[20][N/20+5];
	int bl[N+5],p[N+5];
	int pre[N+5],suf[N+5];
	int F[N+5],S[N+5];
	void init() {
		bs=log2(n)*1.5;
		for (int i{1};i<=n;++i) {
			bl[i]=(i-1)/bs+1;
			if (bl[i-1]!=bl[i]) p[i]=0;
			else p[i]=p[i-1]+1;
		}
		for (int i{1};i<=n;++i)
			if (bl[i]!=bl[i-1]) st[0][bl[i]]=i;
			else chkMax(st[0][bl[i]],i);
		for (int i{1};i<=__lg(bl[n]);++i)
			for (int j{1};j+(1<<i)-1<=bl[n];++j)
				st[i][j]=Max(st[i-1][j],st[i-1][j+(1<<i-1)]);
		for (int i{1};i<=n;++i) {
			if (bl[i]!=bl[i-1]) pre[i]=i;
			else pre[i]=Max(pre[i-1],i);
		}
		for (int i{n};i>=1;--i) {
			if (bl[i]!=bl[i+1]) suf[i]=i;
			else suf[i]=Max(suf[i+1],i);
		}
		for (int i{1};i<=n;++i) {
			if (bl[i]!=bl[i-1]) *S=0;
			else F[i]=F[i-1];
			while (*S>0&&les(S[*S],i)) F[i]^=1<<p[S[(*S)--]];
			S[++*S]=i;F[i]|=(1<<p[i]);
		}
	}
	int ask(int l,int r) {
		int L{bl[l]},R{bl[r]};
		if (L!=R) {
			int ans{Max(suf[l],pre[r])};
			if (R-L>1) {
				int z{__lg(R-L-1)};
				ans=Max(ans,Max(st[z][L+1],st[z][R-(1<<z)]));
			}
			return ans;
		} else {
			return l+__builtin_ctz(F[r]>>p[l]);
		}
	}
} A;
// tree basic op start
int LCA(int u,int v) {
	if (u==v) return u;
	u=L[u];v=L[v];
	if (u>v) swap(u,v);
	return fa[fz[A.ask(u+1,v)]];
}
LL d[N+5];
vector<pair<int,int>> e[N+5];
int lb[N+5];
LL dis(int u,int v) { return d[u]+d[v]-2*d[LCA(u,v)]; }
void init(int u,int fa) {
	::fa[u]=fa;
	dep[u]=dep[fa]+1;
	static int lda{0};
	L[u]=++lda;
	fz[lda]=u;
	int p{fa},q{lb[fa]},r{lb[q]};
	lb[u]=(dep[lb[p]]-dep[lb[q]]!=dep[lb[q]]-dep[lb[r]]?p:r);
	for (auto [v,w]:e[u])
		if (v!=fa) {
			d[v]=d[u]+w;
			init(v,u);
		}
	R[u]=lda;
}
int jmp(int u,int k) {
	k=dep[u]-k;
	while (dep[u]>k) {
		if (dep[lb[u]]<k) u=fa[u];
		else u=lb[u];
	}
	return u;
}
bool son(int u,int v) { return L[u]<=L[v]&&L[v]<=R[u]; }
int jump(int a,int b) { return son(a,b)?jmp(b,dep[b]-dep[a]-1):fa[a]; }
// tree basic op end
struct fenwick {
	int t[N+5];
	void add(int x) {
		for (;x<=n;x+=x&-x) ++t[x];
	}
	int qry(int u) {
		int l{L[u]-1},r{R[u]},ans{0};
		while (r>l) ans+=t[r],r&=r-1;
		while (l>r) ans-=t[l],l&=l-1;
		return ans;
	}
} T;
struct centroid {
	int cnt;
	set<int> dots;
	int getwt(int v) { return son(cnt,v)?T.qry(jump(cnt,v)):dots.size()-T.qry(cnt); }
	int nxt(int p) {
		auto it{dots.lower_bound(p)};
		if (it==dots.end()) return n+1;
		return *it;
	}
	int pre(int p) {
		auto it{dots.upper_bound(p)};
		if (it==dots.begin()) return 0;
		return *prev(it);
	}
	int move(int v) {
		if (son(cnt,v)) {
			int a{jump(cnt,v)};
			return LCA(fz[nxt(L[a])],fz[pre(R[a])]);
		}
		int l{L[cnt]},r{R[cnt]};
		int x{v};
		for (auto y:{nxt(1),pre(l-1),nxt(r+1),pre(n)}) {
			if (y==0||y==n+1||l<=y&&y<=r) continue;
			x=LCA(x,fz[y])^LCA(x,cnt)^LCA(fz[y],cnt);
		}
		return x;
	}
	void add(int v) {
		dots.insert(L[v]);
		T.add(L[v]);
		if (v==cnt) return;
		int wt{getwt(v)};
		if (2*wt<=dots.size()) return;
		int to{move(v)};
		cnt=to;
	}
} C;
using P=array<int,2>;
P operator+(const P &a,const P &b) {
	if (a[0]==-1) return b;
	if (b[0]==-1) return a;
	auto [x,y]=a;
	LL xy{dis(x,y)};
	for (auto z:b) {
		LL xz{dis(x,z)},yz{dis(y,z)},mx{max({xy,xz,yz})};
		if (mx==xz) y=z,xy=xz;
		else if (mx==yz) x=z,xy=yz;
	}
	return {x,y};
}
struct segtree {
	P t[N<<1];
	void build() {
		for (int i{1};i<=n;++i) t[i+n-1]={i,i};
		for (int i{n-1};i>=1;--i)
			t[i]=t[i<<1]+t[i<<1|1];
	}
	void mod(int x) {
		t[x+=n-1]={-1,-1};
		while (x>>=1) t[x]=t[x<<1]+t[x<<1|1];
	}
} S;
int main() {
	cin.tie(nullptr)->sync_with_stdio(false);
	cin>>n;
	for (int i{1};i<n;++i) {
		int u,v,w;cin>>u>>v>>w;
		e[u].emplace_back(v,w);
		e[v].emplace_back(u,w);
	}
	init(1,0);
	A.init();C.cnt=1;S.build();
	LL ans{0};
	LCA(53,54);
	for (int i{1};i<=n;++i) {
		int cnt{C.cnt};
		auto [a,b]{S.t[1]};
		LL xa{dis(a,cnt)},xb{dis(b,cnt)};
		if (xa<xb) a=b,xa=xb;
		S.mod(a);C.add(a);
		ans+=xa-dis(cnt,C.cnt);
		if (~i&1) cout<<ans<<" ";
	}
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 3ms
memory: 27212kb

input:

7
1 3 99
2 3 82
3 4 4
4 5 43
5 6 5
4 7 3

output:

181 280 287 

result:

ok 3 number(s): "181 280 287"

Test #2:

score: 0
Accepted
time: 4ms
memory: 27372kb

input:

1000
328 12 58771429
881 504 17030494
847 622 20805817
12 922 58532669
879 929 52585738
495 726 27873950
855 17 37971674
797 941 76999719
702 610 719916
479 127 97829887
731 557 55300256
282 615 88802280
651 318 64099880
540 51 6547869
896 54 87823596
674 879 80674008
77 691 54802376
193 851 7869172...

output:

48829042195 97562386542 146216474947 194713456438 243120633399 291394542517 339657517459 387785045812 435787622310 483691355869 531476208289 579153483709 626793764008 674259794140 721617453738 768862531418 816032104456 863044440224 909960999950 956790589086 1003491332151 1050093110804 1096582356539 ...

result:

ok 500 numbers

Test #3:

score: 0
Accepted
time: 12ms
memory: 27396kb

input:

1000
739 878 29520635
133 940 5021186
160 908 26446479
441 122 80604853
539 396 95959331
635 860 46393560
387 172 58313059
53 442 65841670
121 159 59547874
35 264 28494605
269 78 29571243
436 384 89754669
619 47 52195144
57 336 95094232
936 419 88183176
877 634 14912042
47 100 57449297
533 101 61185...

output:

1335958866 2626054407 3904456915 5174845834 6437211717 7689455676 8928545787 10163335876 11395869036 12622043944 13839303826 15049898576 16256276325 17459646468 18659090162 19856778178 21048658276 22239285858 23421421030 24597109238 25772007715 26944410577 28111355238 29275440829 30439025973 3160110...

result:

ok 500 numbers

Test #4:

score: 0
Accepted
time: 61ms
memory: 29176kb

input:

10000
8832 9937 83287693
1229 3010 26805846
5184 8703 32371496
5692 201 90600077
7857 7922 2427036
6991 1815 55936149
9126 8434 96181780
2395 5238 99604883
3721 3882 32707216
6961 5616 4158592
479 2786 52279400
9395 164 84498120
9470 462 16429465
8303 9717 36203661
4462 3119 77535638
9010 5633 83602...

output:

501483023048 1002862634577 1504180026111 2005449794525 2506536411562 3007537456615 3508449380203 4009328554633 4510105447462 5010869687212 5511538034705 6012089525686 6512463969594 7012812594398 7513027036015 8013205824561 8513282014876 9013342841924 9513374638228 10013328423574 10513136286282 11012...

result:

ok 5000 numbers

Test #5:

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

input:

10000
4492 5687 48649564
2101 358 76113540
8890 681 20477601
5658 2715 20252482
1495 646 86758431
3635 3432 68949767
4697 4340 46098280
63 5675 93748955
5761 7076 22517422
3184 9956 51745781
5532 8952 73420533
1284 4986 3427090
6181 8228 67376021
3115 7851 49040922
5609 4274 73495454
3082 7140 33903...

output:

1819011399 3610283149 5389719917 7165165127 8935910477 10688388373 12428866897 14143649215 15852590144 17553165073 19249717624 20945981402 22640112945 24322221048 26001998205 27679479690 29351460121 31019617475 32687276454 34352073284 36015148263 37676360382 39336662739 40988468898 42638462940 44286...

result:

ok 5000 numbers

Test #6:

score: 0
Accepted
time: 2276ms
memory: 46288kb

input:

100000
24880 31580 94970384
94020 94021 53992679
93018 20941 73715500
35013 68974 24682681
84533 55066 72610856
9580 43559 96196239
80047 56875 25109065
83499 20829 59808314
97995 41133 22740692
23426 74367 65415289
57511 75315 31164442
36922 42744 52608303
83057 76938 87278645
55747 45197 84000571
...

output:

5010397956787 10020641445288 15030757289053 20040692351879 25050527457825 30060240975402 35069836607862 40079333710046 45088716306382 50098029965855 55107309142733 60116488016667 65125537215058 70134572054336 75143498785869 80152300239578 85160932266852 90169508996796 95177987864419 100186333199356 ...

result:

ok 50000 numbers

Test #7:

score: 0
Accepted
time: 337ms
memory: 43380kb

input:

100000
32181 68000 15493475
88894 82340 11714352
79812 31544 86232423
73614 55014 46228320
7028 69936 84826815
68637 37370 31280392
34471 48812 14271120
50037 62047 19858468
79136 40904 80990914
80885 74651 35886268
88133 57787 68840457
93961 82580 32540253
77277 40794 72680361
33386 18995 31480571
...

output:

2197115369 4378844364 6536375889 8684639554 10819799210 12948112423 15071189311 17188492641 19303504996 21413099607 23519049352 25622386865 27721322975 29817756312 31913431097 34006879968 36098383428 38188218107 40276279894 42363836904 44450338695 46534379348 48615680493 50695618474 52773245303 5484...

result:

ok 50000 numbers

Test #8:

score: 0
Accepted
time: 3735ms
memory: 44868kb

input:

100000
27716 41393 13103475
27716 32742 1
35769 34039 1
27716 28468 35002599
65286 21629 1
1274 3481 1
27716 80301 1
31800 58344 1
22432 89093 1
51649 4410 1
95046 91525 1
51649 488 70151193
51649 84574 1
70847 43355 1
27716 84388 18403263
22083 66259 1
27716 47053 1
11470 16382 1
51649 42694 1
3478...

output:

200049999 400049998 600049997 799950000 999850003 1199650010 1399450017 1599150028 1798850039 1998450054 2198050069 2397550088 2597050107 2796450130 2995850153 3195150180 3394450207 3593650238 3792850269 3991950304 4191050339 4390050378 4589050417 4787950460 4986850503 5185650550 5384450597 55831506...

result:

ok 50000 numbers

Test #9:

score: 0
Accepted
time: 1754ms
memory: 42900kb

input:

100000
19287 14417 50194225
34001 2157 61127931
19287 42027 64140921
19287 81054 58900417
34001 70264 37539667
34001 65454 57152583
19287 37399 33843133
34001 21070 67237855
34001 52402 96474351
19287 11956 90043641
34001 97764 61049983
19287 13878 90175553
19287 36808 81805137
19287 54534 77326125
...

output:

200002999 400002998 600002997 799997000 999991003 1199979010 1399967017 1599949028 1799931039 1999907054 2199883069 2399853088 2599823107 2799787130 2999751153 3199709180 3399667207 3599619238 3799571269 3999517304 4199463339 4399403378 4599343417 4799277460 4999211503 5199139550 5399067597 55989896...

result:

ok 50000 numbers

Test #10:

score: 0
Accepted
time: 305ms
memory: 42572kb

input:

100000
71443 79291 99974715
71443 77865 98228159
93028 52371 98622805
71443 43568 99694827
71443 88790 99274211
93028 1028 99697277
71443 59050 98648971
71443 51386 99481971
93028 78457 99159257
93028 54785 99404453
93028 71966 98120457
71443 41607 98469239
71443 2652 99519603
93028 64376 98700225
9...

output:

200000099 400000098 600000097 799999900 999999703 1199999310 1399998917 1599998328 1799997739 1999996954 2199996169 2399995188 2599994207 2799993030 2999991853 3199990480 3399989107 3599987538 3799985969 3999984204 4199982439 4399980478 4599978517 4799976360 4999974203 5199971850 5399969497 55999669...

result:

ok 50000 numbers

Test #11:

score: 0
Accepted
time: 329ms
memory: 43456kb

input:

100000
43198 11446 65
33109 39242 83
16804 85142 93
58832 6877 24
28514 763 97
32592 94554 100
88795 75864 87
40650 71839 21
49242 87929 28
36147 70656 67
55703 9078 62
10597 51335 61
64586 36879 68
7334 21072 67
91083 20256 83
28103 87578 74
20626 50 1
17013 39648 75
56873 11133 5
38360 23912 60
17...

output:

2309 4609 6893 9152 11404 13646 15882 18116 20348 22578 24800 27017 29234 31447 33656 35864 38070 40273 42476 44677 46876 49074 51270 53464 55657 57847 60036 62220 64404 66587 68770 70951 73131 75311 77490 79668 81845 84021 86194 88367 90538 92707 94875 97041 99206 101371 103536 105701 107864 110025...

result:

ok 50000 numbers

Test #12:

score: 0
Accepted
time: 347ms
memory: 43492kb

input:

100000
99831 38924 23884
63899 77415 19532
2085 13658 11249
17104 88103 87660
18486 56659 80080
41881 87456 67993
45940 86872 86266
46206 20653 41260
8555 4176 80032
6101 61597 57435
76638 54958 62730
14105 85233 98004
65393 78160 59519
74475 53662 87324
462 75020 85830
90748 6198 63175
91653 32763 ...

output:

2240387 4471361 6694432 8909155 11112691 13304102 15485590 17655970 19823057 21983791 24142034 26298504 28450093 30598209 32743889 34886356 37028172 39161512 41293666 43422476 45547038 47670870 49794079 51916058 54034968 56153379 58266997 60380493 62491612 64601444 66708154 68814178 70918425 7302129...

result:

ok 50000 numbers

Test #13:

score: 0
Accepted
time: 300ms
memory: 43464kb

input:

100000
76577 59730 89540366
34969 9030 70175626
2800 36246 52844307
53780 3503 27839494
24215 73120 68666016
17049 14114 29602631
97907 3030 67588169
87561 78070 95659936
32238 8935 18022988
28651 11740 57828905
95230 57889 73964314
531 47367 87864835
36816 72580 86333329
77257 9824 33360116
35796 3...

output:

2313198690 4599611854 6850580914 9082406115 11297424393 13508000853 15712586794 17906450128 20100036348 22288745936 24472931389 26649138446 28822907162 30994079499 33160572446 35326382196 37491597922 39655259267 41818373964 43979273944 46139939972 48299933427 50459609121 52618283395 54774257940 5692...

result:

ok 50000 numbers

Test #14:

score: -100
Time Limit Exceeded

input:

100000
16640 4342 41876674
66416 5636 19175925
23623 24502 10167465
42960 49487 38998627
7925 85009 93935843
52958 21871 26589167
43965 5461 25577335
3882 40822 68559060
51799 65887 44243532
78339 29648 47974787
41095 50504 2654493
42598 48062 3245480
35534 20188 17483841
92873 81702 45239585
25660 ...

output:

4991835604361 9983567503589 14975241771255 19966740724775 24958160632410 29949470865553 34940651909295 39931716279194 44922738071376 49913729602873 54904637557619 59895515117698 64886317012781 69876958978329 74867586486026 79858092531308 84848494379314 89838823914689 94829056005658 99819207595278 10...

result: