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]);
}