QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#563571 | #4239. MST | rotcar07 | TL | 36ms | 7828kb | C++20 | 1.3kb | 2024-09-14 13:55:05 | 2024-09-14 13:55:08 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
constexpr int N=3e5+5;
int n,a[N],fa[N],to[N],val[N],sb[N];
inline int getfa(int x){return fa[x]==x?x:fa[x]=getfa(fa[x]);}
inline void solve(){
cin>>n;for(int i=1;i<=n;i++) cin>>a[i],fa[i]=i;
int w=n-1;
long long ans=0;
while(w){
pair<int,int> yanami(a[1],getfa(1)),nukumizu(-1e9,0);
for(int i=1;i<=n;i++) val[i]=1e9,sb[i]=fa[i]==i;
for(int i=2;i<=n;i++){
int f=getfa(fa[i]);
auto&cur=(f!=yanami.first?yanami:nukumizu);
if(a[i]-cur.first<val[f])to[f]=cur.second,val[f]=a[i]-cur.first;
nukumizu=max(nukumizu,cur);
cur=max(cur,make_pair(a[i],f));
}
yanami=make_pair(a[n],getfa(n)),nukumizu=make_pair(1e9,0);
for(int i=n-1;i>=1;i--){
int f=getfa(fa[i]);
auto&cur=(f!=yanami.first?yanami:nukumizu);
if(cur.first-a[i]<val[f])to[f]=cur.second,val[f]=cur.first-a[i];
nukumizu=min(nukumizu,cur);
cur=min(cur,make_pair(a[i],f));
}
for(int i=1;i<=n;i++) if(sb[i]&&getfa(i)!=getfa(to[i])){
fa[getfa(to[i])]=getfa(i);w--;
ans+=val[i];
}
}
cout<<ans<<'\n';
}
int main(){
std::ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t;cin>>t;
while(t--) solve();
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 7828kb
input:
2 5 1 2 3 4 5 3 10 45 10
output:
4 -35
result:
ok 2 number(s): "4 -35"
Test #2:
score: 0
Accepted
time: 36ms
memory: 5788kb
input:
300000 1 -167586 1 45048 1 -218274 1 -39107 1 -15880 1 33014 1 217559 1 -208936 1 -260570 1 -83353 1 -39868 1 -253159 1 -26640 1 -114610 1 -244464 1 -7217 1 -196817 1 168691 1 146930 1 284612 1 -93130 1 -186071 1 -31746 1 37800 1 -255791 1 -237603 1 81359 1 201796 1 106965 1 -8371 1 -85871 1 -270622...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
ok 300000 numbers
Test #3:
score: -100
Time Limit Exceeded
input:
150000 2 -13258 -22375 2 -54993 -139278 2 -190454 190904 2 -167856 -255749 2 -4278 -217960 2 -267607 -152069 2 232717 199468 2 -154968 -171972 2 -166963 -274452 2 78459 -235523 2 -243695 163707 2 37498 -80301 2 196137 -251909 2 -77332 -82651 2 236076 250081 2 -139194 8035 2 256129 185906 2 72175 -17...
output:
-9117 -84285 381358 -87893 -213682 115538 -33249 -17004 -107489 -313982 407402 -117799 -448046 -5319 14005 147229 -70223 -242776 531933 251314 -377509 -258596 -210071 480133 -27044 110616 213370 6298 -370703 -118888 -103653 -346212 54848 -39115 -22654 -90525 -90204 345598 -96264 854 -433346 -187189 ...