95分求助,错了第4个正式数据
查看原帖
95分求助,错了第4个正式数据
957205
Frommyvalleyuphard楼主2025/7/20 15:30
#include<bits/stdc++.h>
using namespace std;
vector<long long> k[2500],vk[2500];
long long g[2500][2500],bfs[3000000][2],v[2500],tk[2500][2500],ps[2500],e1=0,e2=1;
bool sort2(long long a,long long b){
	return v[a]>v[b];
}
int main(){
	long long n,m,p,ci1,ci2,ans=0;
 	cin>>n>>m>>p;
	for(long long a=0;a<n;a++){
		if(a!=0){
			cin>>v[a];
		}
		for(long long b=0;b<n;b++){
			if(a!=b){
				g[a][b]=0x3f3f3f3f;
			}
		}
	}
	for(long long a=0;a<m;a++){
		cin>>ci1>>ci2;
		ci1--,ci2--;
		k[ci1].push_back(ci2);k[ci2].push_back(ci1);
	}
	for(long long a=0;a<n;a++){
		bfs[0][0]=a,bfs[0][1]=0,e1=0,e2=1;
		while(e1<e2 && bfs[e1][1]<=p+1){
			for(long long b=0;b<k[bfs[e1][0]].size();b++){
				long long q=k[bfs[e1][0]][b];
				if(g[a][q]==0x3f3f3f3f){
					g[a][q]=bfs[e1][1]+1;bfs[e2][0]=q,bfs[e2][1]=bfs[e1][1]+1;e2++;
				}
			}
			e1++;
		}
	}
	for(long long a=0;a<n;a++){
		for(long long b=0;b<n;b++){
			if(g[a][b]<=p+1){
				g[a][b]=1;
			}else{
				g[a][b]=0;
			}
		}
	}
	for(long long a=1;a<n;a++){
		for(long long b=1;b<n;b++){
			if(a!=b && g[0][b]==1 && g[b][a]==1){
				tk[a][ps[a]]=b;ps[a]++;
			}
		}
		sort(tk[a],tk[a]+ps[a],sort2);
	}
	for(long long a=1;a<n;a++){
		for(long long b=a+1;b<n;b++){
			if(g[a][b]==0){
				continue;
			}
			long long a1=0,b1=0;
			for(long long j=0;j<ps[a];j++){
				if(tk[a][j]!=b && tk[a][j]!=0){
					a1=tk[a][j];break;
				}
			}
			for(long long j=0;j<ps[a];j++){
				if(tk[b][j]!=a && tk[b][j]!=0 && tk[b][j]!=a1){
					b1=tk[b][j];break;
				}
			}
			if(a1!=0 && b1!=0){
				ans=max(ans,v[a1]+v[a]+v[b]+v[b1]);
			}
			a1=0,b1=0;
			for(long long j=0;j<ps[a];j++){
				if(tk[b][j]!=a && tk[b][j]!=0){
					b1=tk[b][j];break;
				}
			}
			for(long long j=0;j<ps[a];j++){
				if(tk[a][j]!=b && tk[a][j]!=0 && tk[a][j]!=b1){
					a1=tk[a][j];break;
				}
			}
			if(a1!=0 && b1!=0){
				ans=max(ans,v[a1]+v[a]+v[b]+v[b1]);
			}
		}
	}
	cout<<ans;
}
2025/7/20 15:30
加载中...