Sub #5 WA 求助
查看原帖
Sub #5 WA 求助
983684
yangduan_楼主2024/3/30 21:34
#include<bits/stdc++.h>
using namespace std;
const int N=3e3;
#define ll long long
struct node{
	ll id,fs;
}ma[N][N],md[N][N];
ll n,m,k,x,y,cnt[N],ans=-1,sum;
ll dis[N][N],vis[N],fs[N];
vector<ll>v[N];
void bfs(int a){
	queue<ll> q;
	int i,j;
	q.push(a);
	dis[a][a]=0;
	while(!q.empty()){
		int now=q.front();
		q.pop();
		for(i=0;i<v[now].size();i++){
			if(vis[v[now][i]]==0){
				q.push(v[now][i]);
				vis[v[now][i]]=1;
				dis[a][v[now][i]]=dis[a][now]+1;
			}
		}
	}
}
int cmp(node xx,node yy){
	return xx.fs>yy.fs;
}
int main(){
	int i,j;
	cin>>n>>m>>k;
	k++;
	memset(dis,0x3f,sizeof(dis));
	for(i=2;i<=n;i++){
		cin>>fs[i];
	}
	for(i=1;i<=m;i++){
		cin>>x>>y;
		v[x].push_back(y);
		v[y].push_back(x);
	}
	for(i=1;i<=n;i++){
		memset(vis,0,sizeof(vis));
		bfs(i);
	}
	/*for(i=1;i<=n;i++){
		for(j=1;j<=n;j++){
			cout<<dis[i][j]<<" ";
		}
		cout<<endl;
	}*/
	for(i=2;i<=n;i++){//枚举 B 
		for(j=2;j<=n;j++){//枚举 A 
			if(dis[1][j]<=k&&dis[i][j]<=k){
				ma[i][++cnt[i]].id=j;
				ma[i][cnt[i]].fs=fs[j];
			}
		}
	}
	for(i=2;i<=n;i++){
		sort(ma[i]+1,ma[i]+cnt[i]+1,cmp);
	}
	ll aa,dd;
	for(i=2;i<=n;i++){//B 
		for(j=2;j<=n;j++){//C
			if(i!=j&&dis[i][j]<=k){
				for(aa=1;aa<=3;aa++){//A
					for(dd=1;dd<=3;dd++){//D
						int ax=ma[i][aa].id;
						int dx=ma[j][dd].id;
						if(ax!=i&&ax!=j&&ax!=dx&&dx!=i&&dx!=j&&ax&&dx){
							ans=max(ans,fs[ax]+fs[i]+fs[dx]+fs[j]);
						}
					}
				}
			}
		}
	}
	cout<<ans;
	return 0;
} 
2024/3/30 21:34
加载中...