想知道为什么会 WA?
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
int n,m,k;
ll w[N],maxx,ans=-1e18;
bool vis[N];
vector<int>v1[N],v2[N];
priority_queue<pair<int,int> >q;
void bfs(int x){
memset(vis,0,sizeof vis);
q=priority_queue<pair<int,int> >();
q.push(make_pair(0,x));
vis[x]=1;
while(!q.empty()){
int u=q.top().second,val=q.top().first;
q.pop();
for(int i=0;i<v1[u].size();i++)
if(!vis[v1[u][i]]){
vis[v1[u][i]]=1;
if(val<=k)
v2[x].push_back(v1[u][i]);
if(val+1<=k)
q.push(make_pair(val+1,v1[u][i]));
}
}
}
void dfs(int x,int len,ll val){
if(val+(ll)maxx*(5ll-len)<ans)
return ;
if(len==5){
for(int i=0;i<v2[x].size();i++)
if(v2[x][i]==1){
ans=max(ans,val);
break;
}
vis[x]=0;
return ;
}
for(int i=0;i<v2[x].size();i++)
if(!vis[v2[x][i]]){
vis[v2[x][i]]=1;
dfs(v2[x][i],len+1,val+w[v2[x][i]]);
vis[v2[x][i]]=0;
}
}
int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=2;i<=n;i++)
scanf("%lld",&w[i]),maxx=max(maxx,w[i]);
for(int i=1,x,y;i<=m;i++)
scanf("%d%d",&x,&y),v1[x].push_back(y),v1[y].push_back(x);
for(int i=1;i<=n;i++)
bfs(i);
memset(vis,0,sizeof vis);
vis[1]=1;
dfs(1,1,0);
return printf("%lld\n",ans),0;
}