关于环上两点距离
  • 板块学术版
  • 楼主___A__
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/6/15 10:07
  • 上次更新2024/6/15 13:11:46
查看原帖
关于环上两点距离
275860
___A__楼主2024/6/15 10:07

rt 是边权 这两种写法有什么区别

这是错的

long long num=0;
Max1[vec.size()]=Max2[vec.size()]=-1e18;
for(int i=1;i<vec.size();i++){
    sum[i]=sum[i-1]+val[vec[i-1]];
}
for(int i=vec.size()-1;i>=0;i--){
    Max1[i]=max(Max1[i+1],d1[vec[i]]+sum[i]),Max2[i]=max(Max2[i+1],d1[vec[i]]-sum[i]);
}
for(int i=0;i<vec.size();i++){
    num=max(num,Max1[i+1]-sum[i]+d1[vec[i]]);
}
int cost=calc(vec.back(),vec[0])+sum[vec.size()-1];
for(int i=0;i<vec.size();i++){
    num=max(num,cost+sum[i]+d1[vec[i]]+Max2[i+1]);
}
这是对的

long long num=0;
int len=vec.size();
for(int i=0;i<len;i++){
    vec.push_back(vec[i]);
}
for(int i=1;i<vec.size();i++){
    if(i==vec.size()/2){
        sum[i]=sum[i-1]+calc(vec.back(),vec[0]);
   }
    else{
        sum[i]=sum[i-1]+val[vec[i-1]];
    }
}
Max[len]=-1e18;
for(int i=len-1;i>=1;i--){
    Max[i]=max(Max[i+1],d1[vec[i]]+sum[i]);
}
for(int i=0;i<len;i++){
    num=max(num,d1[vec[i]]+Max[i+1]-sum[i]);
}
for(int i=len-1;i>=1;i--){
    Max[i]=max(Max[i+1],d1[vec[i]]-sum[i]);
}
for(int i=0;i<len;i++){
    num=max(num,d1[vec[i]]+Max[i+1]+sum[i+len]);
}
2024/6/15 10:07
加载中...