| 比赛 | 
    CSP2022提高组 | 
    评测结果 | 
    AAAAAAAAAAATTTAAATTT | 
    | 题目名称 | 
    假期计划 | 
    最终得分 | 
    70 | 
    | 用户昵称 | 
    zxhhh | 
    运行时间 | 
    12.137 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    29.95 MiB  | 
    | 提交时间 | 
    2022-10-30 08:52:10 | 
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N = 2510, M = 1e4 + 10;
int hd[N], nxt[M * 2], ver[M * 2], idx;
typedef long long LL;
int dis[N][N], n, m, k;
LL s[N], res;
inline void add (int x, int y) {
	ver[++idx] = y;
	nxt[idx] = hd[x];
	hd[x] = idx;
}
void bfs (int st) {
	queue <int> q;
	dis[st][st] = -1;
	q.push(st);
	while (q.size()) {
		int t = q.front(); q.pop();
		if (dis[st][t] >= k) return;
		for (int i = hd[t]; i ;i = nxt[i]) {
			int y = ver[i];
			if (dis[st][t] + 1 < dis[st][y]) {
				dis[st][y] = dis[st][t] + 1;
				q.push(y);
			}
		}
	}
}
int main () {
	freopen("csp2022_holiday.in", "r", stdin);
	freopen("csp2022_holiday.out", "w", stdout);
	memset(dis, 0x3f, sizeof(dis));
	scanf("%d%d%d", &n, &m, &k);
	for (int i = 2;i <= n;i++) scanf("%lld", &s[i]);
	for (int i = 1;i <= m;i++) {
		int x, y;
		scanf("%d%d", &x, &y);
		add(x, y); add(y, x);
	}
	for (int i = 1;i <= n;i++) bfs(i);
	for (int j1 = 2;j1 <= n;j1++) {
		if (dis[1][j1] > k) continue;
		for (int j2 = 2;j2 <= n;j2++) {
			if (j2 == j1 || dis[j1][j2] > k) continue;
			for (int j3 = 2;j3 <= n;j3++) {
				if (j3 == j2 || j3 == j1 || dis[j3][j2] > k) continue;
				for (int j4 = 2;j4 <= n;j4++) {
					if (j4 == j1 || j4 == j2 || j4 == j3 || dis[j4][j3] > k || dis[j4][1] > k) continue;
					res = max(res, s[j1] + s[j2] + s[j3] + s[j4]);
				}
			}
		}
	}
	printf("%lld\n", res);
	return 0;
}