比赛 |
CSP2022提高组 |
评测结果 |
AAAAAAAAAAATATTTTTTT |
题目名称 |
假期计划 |
最终得分 |
60 |
用户昵称 |
宇战 |
运行时间 |
17.558 s |
代码语言 |
C++ |
内存使用 |
53.76 MiB |
提交时间 |
2022-10-30 10:08:17 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,k,m;
long long a[4000],f[2505][2505],maxx,vis[4000];
vector<int> d[4000];
void ff(int x,int y,long long s){
if (y==4)
{
if (f[x][1]<=k+1) maxx=max(maxx,s);
return;
}
for (int i=0;i<d[x].size();i++)
if (d[x][i]!=1&&vis[d[x][i]]==0)
{
vis[d[x][i]]=1;
ff(d[x][i],y+1,s+a[d[x][i]]);
vis[d[x][i]]=0;
}
}
int main()
{
freopen("csp2022_holiday.in","r",stdin);
freopen("csp2022_holiday.out","w",stdout);
cin>>n>>m>>k;
memset(f,0x3f3f3f3f,sizeof(f));
for (int i=2;i<=n;i++){
scanf("%lld",&a[i]);
f[i][i]=0;
}
for (int i=1;i<=m;i++){
int xx;
int yy;
scanf("%d%d",&xx,&yy);
f[xx][yy]=f[yy][xx]=1;
}
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
for (int l=j+1;l<=n;l++)
f[j][l]=f[l][j]=min(f[j][l],f[j][i]+f[i][l]);
for (int i=1;i<=n;i++){
for (int j=i+1;j<=n;j++){
if (f[i][j]<=k+1){
d[i].push_back(j);
d[j].push_back(i);
}
}
}
ff(1,0,0);
cout<<maxx;
return 0;
}