QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#116498 | #6350. MIT | Sorting | WA | 170ms | 30336kb | C++ | 3.8kb | 2023-06-29 13:27:15 | 2023-06-29 13:27:17 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define fi first
#define se second
const int N=1e5+5;
const int iu=17;
int n;
vector<pair<ll,int> >adj[N];
ll d[N];
int h[N];
int st[N],en[N],ord[N],ptr;
int p[N][17];
ll lca(int x,int y){
if(h[x]<h[y]) swap(x,y);
int k=h[x]-h[y];
for(int i=iu-1; i>=0 ;i--){
if((k>>i)&1) x=p[x][i];
}
if(x==y) return x;
for(int i=iu-1; i>=0 ;i--){
if(p[x][i]!=p[y][i]){
x=p[x][i];
y=p[y][i];
}
}
return p[x][0];
}
ll dist(int x,int y){
return d[x]+d[y]-2*d[lca(x,y)];
}
void dfs(int id){
st[id]=++ptr;
ord[ptr]=id;
for(auto c:adj[id]){
if(c.se==p[id][0]) continue;
p[c.se][0]=id;
for(int i=1; i<iu ;i++) p[c.se][i]=p[p[c.se][i-1]][i-1];
d[c.se]=d[id]+c.fi;
h[c.se]=h[id]+1;
dfs(c.se);
}
en[id]=ptr;
}
int bit[N];
void upd(int id,int v){
for(int i=id; i<=n ;i+=i&-i) bit[i]+=v;
}
int qry(int id){
int res=0;
for(int i=id; i>=1 ;i-=i&-i) res+=bit[i];
return res;
}
int kth(int k){
int x=0,y=0;
for(int i=iu-1; i>=0 ;i--){
if((x|(1<<i))<=n && y+bit[x|(1<<i)]<k){
x|=1<<i;
y+=bit[x];
}
}
return ord[x+1];
}
int jump(int x,int sz){
int fro=qry(en[x])-qry(st[x]-1);
if(fro>=sz) return x;
else{
for(int i=iu-1; i>=0 ;i--){
int y=p[x][i];
if(y!=0){
int frog=qry(en[y])-qry(st[y]-1);
if(frog<sz) x=y;
}
}
return p[x][0];
}
}
vector<int>findz(int k){
int mid=kth(k/2+1);
int z1=jump(mid,(k+1)/2);
int sz=qry(en[z1])-qry(st[z1]-1);
if(sz*2!=k) return {z1};
//two centroids annoying case
int one=kth(1);
int z2=jump(one,(k+1)/2);
if(st[z2]<=st[z1] && st[z1]<=en[z2]){
z2=jump(mid,k/2+1);
}
return {z1,z2};
}
vector<int>curz;
ll ans=0;
ll out[N];
const int ts=262144;
ll lz[ts],mn[ts];
int mp[ts];
void build(int id,int l,int r){
if(l==r){
int x=ord[l];
ll frog=dist(curz[0],x);
ans+=frog;
if(curz.size()==2) frog=max(frog,dist(curz[1],x));
lz[id]=mn[id]=frog;
mp[id]=l;
return;
}
int mid=(l+r)/2;
build(id*2,l,mid);
build(id*2+1,mid+1,r);
mn[id]=min(mn[id*2],mn[id*2+1]);
if(mn[id]==mn[id*2]) mp[id]=mp[id*2];
else mp[id]=mp[id*2+1];
}
void add(int id,int l,int r,int ql,int qr,ll v){
if(l>qr || r<ql) return;
if(ql<=l && r<=qr){
lz[id]+=v;mn[id]+=v;
return;
}
int mid=(l+r)/2;
add(id*2,l,mid,ql,qr,v);
add(id*2+1,mid+1,r,ql,qr,v);
mn[id]=min(mn[id*2],mn[id*2+1]);
if(mn[id]==mn[id*2]) mp[id]=mp[id*2];
else mp[id]=mp[id*2+1];
mn[id]+=lz[id];
}
void flow(int id,int l,int r,ll hp){
hp+=lz[id];
if(l==r){
if(hp>1e17) cout << "inf ";
else cout << hp << ' ';
return;
}
int mid=(l+r)/2;
flow(id*2,l,mid,hp);
flow(id*2+1,mid+1,r,hp);
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);
cin >> n;
for(int i=1; i<n ;i++){
int u,v;ll w;cin >> u >> v >> w;
adj[u].push_back({w,v});
adj[v].push_back({w,u});
}
dfs(1);
for(int i=1; i<=n ;i++) upd(i,1);
curz=findz(n);
build(1,1,n);
out[n]=ans;
for(int i=n-1; i>=2 ;i--){
int x=ord[mp[1]];
//cout << "KILL: " << x << endl;
out[i]=out[i+1]-mn[1];
add(1,1,n,st[x],st[x],1e18);
upd(st[x],-1);
auto newz=findz(i);
if(newz.size()==2){
int z1=newz[0],z2=newz[1];
if(h[z1]<h[z2]) swap(z1,z2);
ll d1=dist(z2,curz[0]);
ll d2=dist(z1,curz[0]);
add(1,1,n,st[z1],en[z1],d1-d2);
add(1,1,n,1,n,d2);
}
else if(curz.size()==2){
int z1=curz[0],z2=curz[1];
ll d=dist(z1,z2);
if(h[z1]<h[z2]) swap(z1,z2);
if(z2==newz[0]){
add(1,1,n,st[z1],en[z1],d);
add(1,1,n,1,n,-d);
}
else add(1,1,n,st[z1],en[z1],-d);
}
curz=newz;
/*cout << "DOING " << i << ' ' << out[i] << endl << "CENTROIDS: ";
for(auto c:curz) cout << c << ' ';
cout << endl;
flow(1,1,n,0);
cout << endl;*/
}
for(int i=2; i<=n ;i+=2) cout << out[i] << ' ';
cout << '\n';
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 12480kb
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: 3ms
memory: 11236kb
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: 2ms
memory: 13952kb
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: 10ms
memory: 14752kb
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: 9ms
memory: 14452kb
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: 170ms
memory: 30336kb
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: 127ms
memory: 26996kb
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: 118ms
memory: 28276kb
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: 144ms
memory: 25500kb
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: -100
Wrong Answer
time: 144ms
memory: 25356kb
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 400000099 600000099 800000097 999999705 1199999313 1399998919 1599998525 1799997741 1999996957 2199996171 2399995385 2599994209 2799993033 2999991855 3199990677 3399989109 3599987541 3799985971 3999984401 4199982441 4399980481 4599978519 4799976557 4999974205 5199971853 5399969499 55999671...
result:
wrong answer 2nd numbers differ - expected: '400000098', found: '400000099'