民间数据错误求调!
查看原帖
民间数据错误求调!
581722
HarryZ楼主2023/10/4 12:14

记录

#include<bits/stdc++.h>
#define int long long
using namespace std;

int s[2505],dis[2505][2505],ans,n,m,k,f[2505][6];
vector<int> g[2505],e[2505];
bool flag[2505];

void bffa(int x){
	memset(dis[x],63,20008);
	queue<int> q;
	q.push(x);
	dis[x][x] = 0;
	flag[x] = true;
	while(!q.empty()){
		int u = q.front(),v;
		q.pop();
		flag[u] = false;
		for(int i = 0;i < g[u].size();i++){
			v = g[u][i];
			if(dis[x][v]>dis[x][u]+1){
				dis[x][v] = dis[x][u]+1;
				if(!flag[v]) q.push(v); 
			}
		}
	}
}

void dfs(int x,int num,int sum){
	if(num==5){
		if(dis[x][1]<=k+1) ans = max(ans,sum);
		return;
	}
	if(sum<f[x][num]) return;
	f[x][num] = sum;
	for(int i = 0;i < e[x].size();i++){
		if(flag[e[x][i]]||e[x][i]==1) continue;
		flag[e[x][i]] = 1;
		dfs(e[x][i],num+1,sum+s[e[x][i]]);
		flag[e[x][i]] = 0;
	}
}

signed main()
{
	cin >> n >> m >> k;
	for(int i = 2;i <= n;i++){
		cin >> s[i];
	}
	int x,y;
	for(int i = 1;i <= m;i++){
		cin >> x >> y;
		g[x].push_back(y);
		g[y].push_back(x);
	}
	for(int i = 1;i <= n;i++){
		bffa(i);
	}
	for(int i = 1;i <= n;i++){
		for(int j = i+1;j <= n;j++){
			if(dis[i][j]<=k+1){
				e[i].push_back(j);
				e[j].push_back(i);
			}
		}
	}
	dfs(1,1,0);
	cout << ans << endl;
	return 0;
}
2023/10/4 12:14
加载中...