求助暴力
查看原帖
求助暴力
409774
Maysoul楼主2023/10/18 21:32

暴力都打不满感觉没救了

#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int MAXN=2500+10;
int num,ans,root,n,m,k;
int a[MAXN],dis[MAXN][MAXN],vis[MAXN];
vector<vector<int>> edge;
inline void bfs(int r)
{
	queue<int> que;
	que.push(r);
	int stp=0;
	while(que.size()){
		int cnt=que.size();
		while(cnt--){
			int x=que.front();
			que.pop();
			vis[x]=1;
			dis[root][x]=stp;
			for (int y:edge[x]){
				if(!vis[y]) que.push(y);
			}
		}
		stp++;
	}
}
bool check(int x,int y,int z,int w)
{
	if(dis[1][x]>k+1||dis[x][y]>k+1||dis[y][z]>k+1||dis[z][w]>k+1||dis[w][1]>k+1) return 0;
	return 1;
}
signed main()
{
	int u,v;
	std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	memset(dis,0x3f,sizeof(dis));
	cin>>n>>m>>k;
	edge.resize(n+1);
	for (int i=2;i<=n;i++) cin>>a[i];
	for (int i=1;i<=m;i++){
		cin>>u>>v;
		edge[u].push_back(v);
		edge[v].push_back(u);
	}
	for (int i=1;i<=n;i++){
		root=i;
		memset(vis,0,sizeof(vis));
		bfs(i);
	}
	for (int i=2;i<=n;i++){
		for (int j=2;j<=n;j++){
			if(j==i) continue;
			for (int x=2;x<=n;x++){
				if(x==j||x==i) continue;
				for (int y=2;y<=n;y++){
					if(y==i||y==j||y==x) continue;
					if(check(i,j,x,y)) ans=max(ans,a[i]+a[j]+a[x]+a[y]);
				}
			}
		}
	}
	cout<<ans<<'\n';
	return 0;
}
2023/10/18 21:32
加载中...