帮优化
查看原帖
帮优化
1331246
Guanguplussss楼主2024/10/26 06:49
#include<bits/stdc++.h>
using namespace std;
int n,m,q,w[3000],mp[3000][3000],s,x,y;
int main(){
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			mp[i][j]=99999;
			if(i==j){
				mp[i][j]=0;
			}
		}
	}
	for(int i=2;i<=n;i++){
		cin>>w[i];
	}
	for(int i=1;i<=m;i++){
		cin>>x>>y;
		mp[x][y]=mp[y][x]=1;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=n;k++){
				mp[j][k]=min(mp[j][i]+mp[k][i],mp[j][k]);
			}
		}
	}
	q++;
	for(int a=2;a<=n;a++){
		if(mp[a][1]>q){
			continue;
		}
		for(int b=2;b<=n;b++){
			if(a==b||mp[a][b]>q){
				continue;
			}
			for(int c=2;c<=n;c++){
				if(a==c||b==c||mp[b][c]>q){
					continue;
				}
				for(int d=2;d<=n;d++){
					if(a==d||b==d||c==d||mp[c][d]>q||mp[d][1]>q){
						continue;
					}else{
						s=max(w[a]+w[b]+w[c]+w[d],s);
					}
				}
			}
		}
	}
	cout<<s;
	return 0;
}
2024/10/26 06:49
加载中...