官方数据和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;
}
感谢各位大佬们