80分TLE,MLE,WA,求助
查看原帖
80分TLE,MLE,WA,求助
926491
zblueboil楼主2023/10/4 16:32
#include <bits/stdc++.h>

using namespace std;

#define N 2505
#define M 10005

long long n,m,k,a[M],f[M][4],d[N][N],ans;

vector<int> g[N];
bool vis[M];

void Bfs()
{
    for(int i = 1;i<=n;i++)
    {
        memset(vis,false,sizeof(vis));
        d[i][i] = 0;
        queue<int> q;
        q.push(i);
        vis[i] = true;
        while (!q.empty())
        {
            int cur = q.front();
            q.pop();
            if(d[i][cur] == k+1)
                break;
            for(int j = 0;j<g[cur].size();j++)
            {
                int v = g[cur][j];
                vis[v] = true;
                d[i][v] = d[i][cur]+1;
                q.push(v);
            }
        }
    }
}

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);
    }
    memset(d,0x3f,sizeof(d));
    Bfs();
    for(int i = 2;i<=n;i++)
    {
        for(int j = 2;j<=n;j++)
        {
            if(i==j||d[j][1] > k+1||d[j][i]>k+1)
                continue;
            if(a[j]>a[f[i][1]])
            {
                f[i][3] = f[i][2];
                f[i][2] = f[i][1];
                f[i][1] = j;
            }
            else if(a[j]>a[f[i][2]])
            {
                f[i][3] = f[i][2];
                f[i][2] = j;
            }
            else if(a[j]>a[f[i][3]])
                f[i][3] = j;
        }
    }
    for(int i = 2;i<=n;i++)
    {
        for(int  j = 2;j<=n;j++)
        {
            if(i==j||d[i][j]>k+1)
                continue;
            for(int k = 1;k<=3;k++)
            {
                for(int l = 1;l<=3;l++)
                {
                    int x1 = f[i][k], x4 = f[j][l];
                    if(x1 == i||x1==j||x1==x4||!x1)
                        continue;
                    if(x4==x1||x4==i||x4==j||!x4)
                        continue;
                    ans = max(ans, a[x1]+a[i]+a[j]+a[x4]);
                }
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}
2023/10/4 16:32
加载中...