求一下Subtask #2 #24的数据
查看原帖
求一下Subtask #2 #24的数据
152424
江守离楼主2022/11/14 10:25

官方数据和Subtask #1全部AC了,只有Subtask #2 #24 WA,求一下数据,也请大佬们看一看是什么问题导致的WA

记录

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#define int long long
using namespace std;
#define pii pair<int,int>
const int MAXN=2505;
priority_queue<pii,vector<pii>,greater<pii> > p_q;
vector<pii> v1[MAXN];
int dij[MAXN][MAXN];
int dis[MAXN];
int n,m,k;
int a[MAXN];
vector<int> v2[MAXN];
int vis[MAXN][6];
int b[MAXN];
void dijkstra(int x)
{
    p_q.push({0,x});
    for(int i=1;i<=n;i++)
    {
        if(i!=x)
            dij[x][i]=1e9;
        else dij[x][i]=0;
        dis[i]=0;
    }
    while(p_q.size())
    {
        auto pqt=p_q.top();
        p_q.pop();
        if(dis[pqt.second])
            continue;
        dis[pqt.second]=1;
        for(auto i:v1[pqt.second])
        {
            if(pqt.first+i.first<dij[x][i.second])
            {
                p_q.push({pqt.first+i.first,i.second});
                dij[x][i.second]=pqt.first+i.first;
            }
        }
    }
}
void dfs(int x,int length,int wide)
{
    if(length==4)
    {
        if(dij[x][1]<=k)
            vis[1][5]=max(vis[1][5],wide);
        return;
    }
    if(wide<=vis[x][length])
        return;
    else vis[x][length]=wide;
    b[x]=1;
    for(auto i:v2[x])
    {
        if(!b[i])
            dfs(i,length+1,wide+a[i]);
    }
    b[x]=0;
}
signed main()
{
    //freopen("holiday.in","r",stdin);
    //freopen("holiday.out","w",stdout);
    memset(dij,0,sizeof(dij));
    memset(dis,0,sizeof(dis));
    memset(vis,0,sizeof(vis));
    int dx,dy;
    cin>>n>>m>>k;
    k++;
    for(int i=2;i<=n;i++)
        cin>>a[i];
    for(int i=1;i<=m;i++)
    {
        cin>>dx>>dy;
        v1[dx].push_back({1,dy});
        v1[dy].push_back({1,dx});
    }
    for(int i=1;i<=n;i++)
        dijkstra(i);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(dij[i][j]<=k)
                v2[i].push_back(j);
        }
    }
    for(int i=0;i<=n;i++)
    {
        for(int j=0;j<=5;j++)
        {
            vis[i][j]=-1e9;
        }
    }
    dfs(1,0,0);
    cout<<vis[1][5]<<endl;
    //fclose(stdin);fclose(stdout);
    return 0;
}

感谢各位大佬们

2022/11/14 10:25
加载中...