比赛 CSP2022提高组 评测结果 RRRRRRRRRRRRRRRRRRRR
题目名称 假期计划 最终得分 0
用户昵称 张恒畅 运行时间 0.010 s
代码语言 C++ 内存使用 29.96 MiB
提交时间 2022-10-30 12:29:25
显示代码纯文本
#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;
}