QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#378217 | #4272. Phone Plans | C1942huangjiaxu | 0 | 244ms | 108876kb | C++14 | 2.8kb | 2024-04-06 09:48:27 | 2024-04-06 09:48:27 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=4e5+5,inf=2e9+7;
int n,A,B,Sz[N],sz[N],fa[N],Fa[N][19],tot,ans=inf;
int dfn[N],in[N],out[N],nw,Rt,ln[N];
int rt[N],ls[N*40],rs[N*40],ct[N*40],cnt;
vector<int>e[N],w[N];
ll K,sum,va[N];
struct edge{
int x,y,z;
bool operator <(const edge a)const{return z<a.z;}
}ea[N],eb[N];
int gf(int x){
return fa[x]==x?fa[x]:fa[x]=gf(fa[x]);
}
void dfs1(int x){
for(int i=1;i<19;++i)Fa[x][i]=Fa[Fa[x][i-1]][i-1];
if(x<=n){
in[x]=out[x]=dfn[x]=++dfn[0];
return;
}
in[x]=dfn[0];
for(auto v:e[x])dfs1(v);
out[x]=dfn[0];
}
void ins(int &k,int l,int r,int x){
k=++cnt,ct[k]=1;
if(l==r)return;
int mid=l+r>>1;
if(x<=mid)ins(ls[k],l,mid,x);
else ins(rs[k],mid+1,r,x);
}
int merge(int x,int y){
if(!x||!y)return x|y;
ls[x]=merge(ls[x],ls[y]);
rs[x]=merge(rs[x],rs[y]);
ct[x]=ct[x]+ct[y];
return x;
}
int query(int k,int l,int r,int x,int y){
if(!k)return 0;
if(x<=l&&r<=y)return ct[k];
int mid=l+r>>1,res=0;
if(x<=mid)res+=query(ls[k],l,mid,x,y);
if(y>mid)res+=query(rs[k],mid+1,r,x,y);
return res;
}
void chg(int x){
int c=gf(x),u=dfn[x];
for(int i=18;~i;--i)if(Fa[x][i]&&Fa[x][i]<=nw)x=Fa[x][i];
if(x<=n)return;
sum-=query(rt[c],1,n,in[x],out[x]);
if(out[e[x][0]]>=u)va[x]-=query(rt[c],1,n,in[e[x][1]],out[e[x][1]]);
else va[x]-=query(rt[c],1,n,in[e[x][0]],out[e[x][0]]);
}
void dfs2(int x,int y){
if(x<=n){
va[Rt]-=query(rt[gf(x)],1,n,in[e[Rt][y]],out[e[Rt][y]]);
return;
}
for(auto v:e[x])dfs2(v,y);
}
void calc(int x){
if(x<=n)return;
Rt=x;
if(Sz[e[x][0]]<Sz[e[x][1]])dfs2(e[x][0],1);
else dfs2(e[x][1],0);
sum+=va[x];
}
int main(){
scanf("%d%d%d%lld",&n,&A,&B,&K);
tot=n;
for(int i=1;i<=A;++i)scanf("%d%d%d",&ea[i].x,&ea[i].y,&ea[i].z);
for(int i=1;i<=B;++i)scanf("%d%d%d",&eb[i].x,&eb[i].y,&eb[i].z);
for(int i=1;i<=n;++i)Sz[i]=1,fa[i]=i;
sort(ea+1,ea+A+1);
sort(eb+1,eb+B+1);
for(int i=1;i<=A;++i){
int x=gf(ea[i].x),y=gf(ea[i].y);
if(x==y)continue;
++tot,e[tot].push_back(x),e[tot].push_back(y);
Sz[tot]=Sz[x]+Sz[y];
ln[tot]=ea[i].z;
sum+=(va[tot]=1ll*Sz[x]*Sz[y]);
fa[x]=fa[y]=Fa[x][0]=Fa[y][0]=fa[tot]=tot;
}
for(int i=tot;i;--i)if(!Fa[i][0])dfs1(i);
for(int i=1;i<=n;++i)ins(rt[i],1,n,dfn[i]);
nw=tot;
if(sum>=K)ans=ln[nw];
for(int i=1;i<=n;++i)fa[i]=i,sz[i]=1,w[i].emplace_back(i);
for(int i=1;i<=B;++i){
int x=gf(eb[i].x),y=gf(eb[i].y);
if(x==y)continue;
if(sz[x]>sz[y])swap(x,y);
sum+=1ll*sz[x]*sz[y];
fa[x]=y,sz[y]+=sz[x];
for(auto v:w[x])chg(v),w[y].emplace_back(v);
rt[y]=merge(rt[y],rt[x]);
while(nw>n&&sum-va[nw]>=K){
sum-=va[nw];
calc(e[nw][0]);
calc(e[nw][1]);
--nw;
}
if(sum>=K)ans=min(ans,eb[i].z+ln[nw]);
}
if(ans==inf)puts("-1");
else printf("%d\n",ans);
return 0;
}
詳細信息
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 6
Accepted
time: 0ms
memory: 22708kb
input:
6 4 4 9 1 2 1 2 3 2 1 4 3 3 4 4 5 6 40 1 5 30 2 6 20 3 6 10
output:
33
result:
ok single line: '33'
Test #2:
score: 0
Accepted
time: 3ms
memory: 24276kb
input:
1 0 0 0
output:
0
result:
ok single line: '0'
Test #3:
score: 0
Accepted
time: 7ms
memory: 22544kb
input:
2 0 0 1
output:
-1
result:
ok single line: '-1'
Test #4:
score: 0
Accepted
time: 3ms
memory: 24352kb
input:
2 10 10 1 1 1 915886339 2 2 430624192 1 1 879808770 1 2 577221915 1 1 439429731 1 2 304911826 1 1 148009333 1 2 51122687 1 1 558282772 1 2 421196385 2 1 436692145 1 2 654020563 2 2 162573477 2 2 989531779 1 1 646687051 2 2 549037477 2 2 699532275 1 1 679375858 2 1 83352965 2 1 415698228
output:
51122687
result:
ok single line: '51122687'
Test #5:
score: 0
Accepted
time: 0ms
memory: 24440kb
input:
2 10 10 1 1 1 1000000000 1 2 1000000000 2 2 1000000000 2 1 1000000000 1 2 1000000000 1 1 1000000000 1 2 1000000000 2 2 1000000000 1 2 1000000000 1 2 1000000000 2 1 1000000000 1 2 1000000000 2 1 1000000000 2 2 1000000000 1 2 1000000000 2 2 1000000000 1 1 1000000000 1 1 1000000000 2 2 1000000000 1 2 1...
output:
1000000000
result:
ok single line: '1000000000'
Test #6:
score: 0
Accepted
time: 44ms
memory: 29284kb
input:
2000 0 200000 1199833 636 1231 120395621 689 1640 497332138 1861 1980 798839749 560 1283 560726905 1332 328 431171189 1203 1764 466367210 1102 347 317109768 1462 789 761470540 350 1093 551905741 1718 1047 548650524 51 546 56733461 58 1519 744207013 826 956 943929583 1969 207 238061756 99 47 99683567...
output:
9768257
result:
ok single line: '9768257'
Test #7:
score: -6
Wrong Answer
time: 39ms
memory: 27428kb
input:
2000 200000 0 1937051 1325 1770 628367155 105 1670 728177982 358 778 959944062 826 1691 651665248 1119 1906 382208628 1684 1232 677646622 807 265 902880211 1685 1660 405567549 1853 1982 988679307 1241 1054 385406922 862 1049 356441384 1837 673 443580113 1082 1795 738355567 1703 663 221254144 1792 84...
output:
42060660
result:
wrong answer 1st lines differ - expected: '20263921', found: '42060660'
Subtask #2:
score: 0
Wrong Answer
Test #53:
score: 0
Wrong Answer
time: 244ms
memory: 108876kb
input:
200000 100000 100000 7628995 23677 113459 839167193 165893 15365 669621527 26287 109671 214795757 156871 136723 522277985 9957 100463 806718116 104783 161385 156110975 184577 92225 545172629 57373 130083 980035338 167231 49597 919886451 115601 24325 717233004 99413 141311 737488449 83437 62759 76873...
output:
1
result:
wrong answer 1st lines differ - expected: '502149991', found: '1'
Subtask #3:
score: 0
Wrong Answer
Test #103:
score: 6
Accepted
time: 0ms
memory: 24408kb
input:
1 0 0 0
output:
0
result:
ok single line: '0'
Test #104:
score: 0
Accepted
time: 0ms
memory: 24304kb
input:
2 0 0 1
output:
-1
result:
ok single line: '-1'
Test #105:
score: 0
Accepted
time: 43ms
memory: 25008kb
input:
2 10 200000 1 2 1 319832429 1 1 412617159 2 1 337734185 1 2 674652880 1 2 454610992 2 2 688717944 1 1 189208056 2 2 951221780 1 2 594191431 2 2 87592160 1 2 833491749 2 2 732961971 2 1 575969648 2 2 268359887 2 1 436382098 1 2 514959278 1 2 305446083 1 2 365989813 1 2 296840111 1 1 541558213 1 1 497...
output:
10104
result:
ok single line: '10104'
Test #106:
score: 0
Accepted
time: 21ms
memory: 26676kb
input:
2 10 200000 1 1 1 1000000000 1 1 1000000000 1 2 1000000000 1 2 1000000000 1 2 1000000000 1 1 1000000000 2 1 1000000000 2 2 1000000000 2 2 1000000000 2 2 1000000000 1 1 1000000000 1 2 1000000000 1 1 1000000000 2 1 1000000000 1 1 1000000000 1 1 1000000000 2 1 1000000000 1 1 1000000000 2 2 1000000000 2...
output:
1000000000
result:
ok single line: '1000000000'
Test #107:
score: 0
Accepted
time: 229ms
memory: 96792kb
input:
200000 10 200000 17900 199675 76237 290240030 50211 6922 761990536 92097 120746 607490 192856 130409 616541101 50427 80049 330957286 129588 180294 466199684 8674 110653 155297749 91380 156344 798960399 102127 40858 801752583 94673 105892 152356242 185676 6183 263664373 169026 112948 812501808 93517 ...
output:
75425485
result:
ok single line: '75425485'
Test #108:
score: 0
Accepted
time: 226ms
memory: 96816kb
input:
200000 10 200000 11791021341 90115 14234 985783971 123477 154651 628493605 123171 47179 220847663 8072 163826 30383173 174753 12792 15862638 172837 96919 880800330 92696 166466 443031361 85298 185851 999558577 23737 111350 809362300 24551 127050 920973896 121483 145215 67814677 78536 41919 475800490...
output:
949367959
result:
ok single line: '949367959'
Test #109:
score: 0
Accepted
time: 239ms
memory: 96756kb
input:
200000 0 200000 423432 117280 87297 405090778 161764 93979 279208002 169095 190396 237565477 5136 81072 251360373 177384 130645 595157997 5282 38206 898866303 150431 96891 829055730 18413 42187 599085995 75585 47004 557307885 92187 77157 349172549 63029 186638 993483250 37685 198246 538754012 119056...
output:
404806867
result:
ok single line: '404806867'
Test #110:
score: 0
Accepted
time: 24ms
memory: 93832kb
input:
200000 10 0 1583868 66186 49114 583417488 79347 122356 957296935 4161 178945 973881307 39875 85386 62804962 62164 81798 964069340 6410 188411 31431750 67426 6153 513781110 49101 116783 513947988 61043 89483 259723608 14116 90504 23294861
output:
-1
result:
ok single line: '-1'
Test #111:
score: 0
Accepted
time: 215ms
memory: 96740kb
input:
200000 10 200000 19999900000 47625 147346 8 147346 121067 9 97009 179826 2 155552 97009 1 179826 22149 3 15370 4310 5 135552 47625 7 121067 131030 10 4310 135552 6 22149 15370 4 92707 136627 90227 20274 369 174990 32793 164281 194588 56508 95231 92612 117675 125225 114617 42843 81551 39780 149173 15...
output:
199999
result:
ok single line: '199999'
Test #112:
score: 0
Accepted
time: 239ms
memory: 97172kb
input:
200000 10 200000 19999900000 45665 143462 7 22696 184210 2 38538 57388 9 184210 154285 3 125307 22696 1 149825 71332 5 143462 38538 8 154285 149825 4 57388 182077 10 71332 45665 6 163095 156887 174710 77920 77020 63954 85503 109613 119638 46319 118285 60934 66569 45264 83574 73519 101885 163357 1583...
output:
200000
result:
ok single line: '200000'
Test #113:
score: 0
Accepted
time: 227ms
memory: 96640kb
input:
200000 10 200000 19999900000 739 28876 199992 53663 1295 199998 43161 52504 200000 158247 739 199993 2816 184328 199996 52504 53663 199999 1295 2816 199997 52726 158247 199994 28876 8395 199991 184328 52726 199995 130045 124454 95456 117404 39359 188185 42676 84681 4828 105147 95150 194669 17107 579...
output:
199999
result:
ok single line: '199999'
Test #114:
score: 0
Accepted
time: 208ms
memory: 96620kb
input:
200000 10 200000 19999900000 19794 183474 199991 71973 145759 199999 167290 188987 199995 6730 167290 199996 92616 6730 199997 93098 157369 199993 145759 92616 199998 104691 71973 200000 157369 19794 199992 188987 93098 199994 4529 33398 169717 116172 158258 118532 69720 25407 140713 173220 192301 1...
output:
200000
result:
ok single line: '200000'
Test #115:
score: 0
Accepted
time: 23ms
memory: 93520kb
input:
200000 0 0 0
output:
0
result:
ok single line: '0'
Test #116:
score: 0
Accepted
time: 27ms
memory: 93120kb
input:
200000 0 0 1
output:
-1
result:
ok single line: '-1'
Test #117:
score: 0
Accepted
time: 20ms
memory: 94608kb
input:
200000 0 0 19999900000
output:
-1
result:
ok single line: '-1'
Test #118:
score: -6
Wrong Answer
time: 220ms
memory: 98532kb
input:
200000 10 200000 0 146668 190255 646706475 71516 174249 65976309 173393 55930 434227341 38682 164404 792088710 68045 174249 105770742 190255 24008 378601596 68045 174249 584120597 68045 68045 891140070 71516 71516 121444300 24008 173393 638520585 42552 123134 440551564 172416 148702 205154389 80345 ...
output:
11707
result:
wrong answer 1st lines differ - expected: '0', found: '11707'
Subtask #4:
score: 0
Skipped
Dependency #1:
0%