跪求大佬调代码,不知道哪里有问题
code
#include<bits/stdc++.h>
#include<vector>
#include<queue>
using namespace std;
typedef pair<long long,int> PLI;
const int INF=1<<30;
const int N=2505;
int n,m,K,a,b;
vector <int> G[N];
vector <PLI> A[N];
int dis[N][N];
bool inq[N];
long long cost[N],ans;
bool cmp(PLI X,PLI Y){
return X.first>Y.first;
}
void SPFA(int s){
queue <int> Q;
for(int i=1;i<=n;i++) dis[s][i]=INF,inq[i]=false;
Q.push(s);
dis[s][s]=0,inq[s]=true;
while(!Q.empty()){
int u=Q.front();Q.pop();
inq[u]=false;
for(int i=0;i<G[u].size();i++){
int v=G[u][i];
if(dis[s][v]>dis[s][u]+1){
dis[s][v]=dis[s][u]+1;
if(!inq[v]) Q.push(v),inq[v]=true;
}
}
}
}
int main(){
// freopen("holiday3.in","r",stdin);
// freopen("holiday_my.out","w",stdout);
scanf("%d%d%d",&n,&m,&K);
for(int i=2;i<=n;i++) scanf("%lld",&cost[i]);
for(int i=1;i<=m;i++){
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
for(int i=1;i<=n;i++) SPFA(i);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(dis[i][j]>K+1||i==j) dis[i][j]=INF;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
if(dis[i][j]!=INF&&i!=j) A[i].push_back(make_pair(cost[j],j));
sort(A[i].begin(),A[i].end(),cmp);
}
for(int i=2;i<=n;i++){
for(int j=2;j<=n;j++){
if(i==j||dis[i][j]==INF) continue;
for(int r=0;r<3&&r<A[i].size();r++){
int k=A[i][r].second;
if(k==j||dis[k][1]==INF) continue;
long long w1=A[i][r].first;
for(int s=0;s<3&&s<A[j].size();s++){
int l=A[j][s].second;
if(l==i||l==k||dis[l][1]==INF) continue;
long long w2=A[j][s].first;
// printf("%d->%d->%d->%d = %lld \n",k,i,j,l,cost[i]+cost[j]+w1+w2);
ans=max(ans,cost[i]+cost[j]+w1+w2);
}
}
}
}
printf("%lld\n",ans);
return 0;
}