比赛 |
CSP2022提高组 |
评测结果 |
AAAAAAAAAAATTTTTTTTT |
题目名称 |
假期计划 |
最终得分 |
55 |
用户昵称 |
hnzzlza |
运行时间 |
18.157 s |
代码语言 |
C++ |
内存使用 |
29.69 MiB |
提交时间 |
2022-10-30 11:54:02 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define LL long long
LL n,m,k,u,v,ans,sta,grade[2505];bool flag[2505];int t[2505][2505];
LL dfs(int now,int step,LL val){
if(step==5){
if(now!=1)return -1;
else return ans=max(ans,val);
}
for(int i=1;i<=n;++i){
if(t[now][i]<=k+1&&flag[i]==0&&now!=i&&t[now][i]>0){
flag[i]=1;
dfs(i,step+1,val+grade[i]);
flag[i]=0;
}
}
return 0;
}
int main(){
freopen("csp2022_holiday.in","r",stdin);
freopen("csp2022_holiday.out","w",stdout);
cin>>n>>m>>k;
memset(t,0x7f,sizeof(t));
for(int i=2;i<=n;++i)cin>>grade[i];
for(int i=1;i<=m;++i){
cin>>u>>v;
t[u][v]=1;t[v][u]=1;
}
for(int k=1;k<=n;++k)
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(t[i][j]>t[i][k]+t[k][j]&&t[i][k]+t[k][j]>0)
t[i][j]=t[i][k]+t[k][j];
dfs(1,0,0);
// for(int i=1;i<=n;++i){
// for(int j=1;j<=n;++j){
// cout<<t[i][j]<<'\t';
// }
// cout<<endl;
// }
cout<<ans;
return 0;
}