求问为何MLE
查看原帖
求问为何MLE
816162
ZAX138楼主2024/10/16 21:39
#include<iostream>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
#include<vector>
#include<stack>
#include<set>
#include<map>
#include<deque>
using namespace std;
const long long mod=1e8-3;
int n,m,k;
long long a[2510],ans;
vector<int> G[2501];
//vector<int> g[2510];
bool vis[2501][2501];
struct node{
    int pos,step;
};
queue<node> q;
void bfs(int pos){
    q.push({pos,});
    while(!q.empty()){
        node x=q.front();
        q.pop();
        int p=x.pos,t=x.step;
        if(t<=k+1&&p!=pos&&!vis[pos][p]&&!vis[p][pos]){
            //g[pos].push_back(p);
            vis[pos][p]=vis[p][pos]=1;
        }
        if(t>=k+1) continue;
        for(auto v:G[p]){
            if(v==p) continue;
            q.push({v,t+1});
        }
    }
}
int main(){
    cin>>n>>m>>k;
    for(int i=2;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=m;i++){
        int x,y;cin>>x>>y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
    for(int i=1;i<=n;i++){
        bfs(i);
    }
//    for(int i=1;i<=n;i++){
//        for(int j=1;j<=n;j++){
//            cout<<vis[i][j]<<" ";
//        }
//        cout<<endl;
//    }
    for(int b=2;b<=n;b++){
        for(int c=2;c<=n;c++){
            if(b==c||!vis[b][c]) continue;
            long long maxa=0,maxd=0,posa = 0,posd=0;
            for(int A=2;A<=n;A++){
                if(A==b||A==c||vis[A][1]==0||vis[b][A]==0){
                    continue;
                }
                //cout<<A<<endl;
                if(maxa<a[A]){
                    posa=A;
                    maxa=a[A];
                }
            }
            for(int d=2;d<=n;d++){
                if(d==b||d==c||d==posa||vis[d][1]==0||vis[c][d]==0){
                    continue;
                }
                //cout<<d<<endl;
                if(maxd<a[d]){
                    posd=d;
                    maxd=a[d];
                }
            }
            if(posa==0||posd==0) continue;
            //cout<<posa<<" "<<b<<" "<<c<<" "<<posd<<" "<<endl;;
            ans=max(ans,maxa+maxd+a[b]+a[c]);
        }
    }
    cout<<ans<<endl;
    return 0;
}

2024/10/16 21:39
加载中...