65pts求调
查看原帖
65pts求调
813681
dulangbier123楼主2023/10/20 15:42

求调

65pts代码

#include<bits/stdc++.h>
using namespace std;
const int N=2500;
int n,m,k,z[N+10],y[N+10][N+10];
vector<int> a[N+10];
void bfs(int p){
	queue<int> q;
	q.push(p);
	while(!q.empty()){
		int t=q.front();
		q.pop();
		if(y[p][t]==k){continue;}
		for(int i=0;i<a[t].size();i++){
			if(y[p][a[t][i]]==-1){
				y[p][a[t][i]]=y[p][t]+1;
				q.push(a[t][i]);
			}
		}
	}
	y[p][p]=-1;
}
inline bool gmx(int &a, int b) {
	return b>a?a=b,true:false;
}
int main(){
	scanf("%d%d%d",&n,&m,&k);
	for(int i=2;i<=n;i++){
		scanf("%d",&z[i]);
	}
	int x,y1;
	for(int i=1;i<=m;i++){
		cin >> x >> y1;
		a[x].push_back(y1),a[y1].push_back(x);
	}
	memset(y,-1,sizeof(y));
	bfs(1);
	int g[N][3]={0};
	for(int i=2;i<=n;i++){
		bfs(i);
		int &x1=g[i][0],&x2=g[i][1],&x3=g[i][2];
		for(int j=2;j<=n;j++){
			if(y[i][j]!=-1){
				if(z[j]>z[x1]){
					x3=x2,x2=x1,x1=j;
					continue;
				}
				if(z[j]>z[x2]){
					x3=x2,x2=j;
					continue;
				}
				if(z[j]>z[x3]){
					x3=j;
				}
			}
		}
	}
	int ans=0;
	for(int b=2;b<=n;b++){
		for(int c=2;c<=n;c++){
			if(y[b][c]!=-1){
				for(int i=0;i<3;i++){
					int a=g[b][i];
					for(int j=0;j<3;j++){
						int d=g[c][j];
						if(a!=c&&a!=d&&b!=d&&y[1][a]!=-1&&y[1][d]!=-1){
							gmx(ans,z[a]+z[b]+z[c]+z[d]);
						}
					}
				}
			}
		}
	}
	printf("%d",ans);
	return 0;
}
2023/10/20 15:42
加载中...