记录编号 |
577289 |
评测结果 |
AAAAATAATTTTTTTTTTTT |
题目名称 |
[CSP 2022S]假期计划 |
最终得分 |
35 |
用户昵称 |
张恒畅 |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
26.000 s |
提交时间 |
2022-10-30 13:09:39 |
内存使用 |
19.48 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct edge {
int to;
int next;
} e[20010];
long long head[2510],tot;
long long w[2510],n,m,k;
long long ans;
void add(int x,int y)
{
tot++;
e[tot].to=y;
e[tot].next=head[x];
head[x]=tot;
}
int dis[2510][2510];
bool vis[2510];
void dijkstra(int s)
{
priority_queue<pair<int,int> >q;
q.push(make_pair(0,s));
memset(vis,0,sizeof(vis));
memset(dis[s],0x3f,sizeof(dis[s]));
dis[s][s]=0;
while(!q.empty()) {
int x=q.top().second;
q.pop();
if(vis[x]) {
continue;
}
vis[x]=1;
for(int i=head[x]; i; i=e[i].next) {
int y=e[i].to;
if(dis[s][y]>dis[s][x]+1) {
dis[s][y]=dis[s][x]+1;
if(!vis[y]) {
q.push(make_pair(-dis[s][y],y));
}
}
}
}
}
bool qim[5010];
void dfs(int x,int val,int ot)
{
if(ot==4&&dis[x][1]<=k+1) {
ans=max(ans,(long long)val);
return;
}
for(int i=2; i<=n; i++) {
if(qim[i]||dis[x][i]>k+1) {
continue;
}
qim[i]=1;
dfs(i,val+w[i],ot+1);
qim[i]=0;
}
return;
}
int main()
{
freopen("csp2022_holiday.in","r",stdin);
freopen("csp2022_holiday.out","w",stdout);
cin >> n >> m >> k;
memset(qim,0,sizeof(qim));
qim[1]=1;
for(int i=2; i<=n; i++) {
scanf("%lld", &w[i]);
}
for( int i=1; i<=m; i++) {
int x, y;
cin >> x >> y;
add(x,y);
add(y,x);
}
for(int i=1; i<=n; i++) {
dijkstra(i);
}
dfs(1,0,0);
cout<<ans;
return 0;
}