T5个MLE5个wa9个求调qwq
查看原帖
T5个MLE5个wa9个求调qwq
377449
zjq123victorW楼主2023/9/26 21:29
#include<bits/stdc++.h>
using namespace std;
#define umap unordered_map
#define uset unordered_set
#define mset multiset
#define ll long long
#define ld long double
#define ull unsigned ll
#define pii pair<int,int>
#define pll pair<ll,ll>
#define ret return
#define il inline
#define tpcTi template<class T>il
#define gc getchar
#define pc putchar
#define spe pc(' ')
#define edl pc('\n')
#define N 2502
const ll INF=9223372036854775807;
const int inf=2147483647;
int n,m,k,dis[N];
vector<int>f[N]; 
bool visit[N][N];
long long num[N];
vector<int>e[N];
bool cmp(int x,int y){
	return num[x]>num[y];
}
int tot=0;
void bfs(int u){
	queue<int>q;
	q.push(u);
	dis[u]=0;
	while(!q.empty()){
//		cout<<++tot<<endl;
		int v=q.front();
		q.pop();
		if(u!=v){
			visit[u][v]=true;
			if(u!=1&&visit[1][v]){
				f[u].push_back(v);
				sort(f[u].begin(),f[u].end(),cmp);
				if(f[u].size()>=4){
					f[u].pop_back();
				}
			}
		}
		if(dis[v]>=k+1)continue;//why 写==过不了? 
//		cout<<++tot<<endl;
		for(int i=0;i<e[v].size();i++){
			int x=e[v][i];
			dis[x]=dis[v]+1;
//			if(dis[v]==k)continue;
			q.push(x);
		}
	}
}
int main(void){
	cin>>n>>m>>k;
	for(int i=2;i<=n;i++){
		cin>>num[i];
	}
	while(m--){
		int u,v;
		cin>>u>>v;
		e[u].push_back(v);
		e[v].push_back(u);
	}
	for(int i=1;i<=n;i++){
		memset(dis,0x3f,sizeof(dis));
		bfs(i);
	}
	long long ans=0;
	for(int i=2;i<=n;i++){
		for(int j=2;j<=n;j++){
			if(visit[i][j]){
//				for(vector<int>::iterator k =f[i].begin();k!=f[i].end();k++){
//					for(vector<int>::iterator l =f[j].begin();l!=f[j].end();l++){
				for(int kk=0;kk<f[i].size();kk++){
					for(int l=0;l<f[j].size();l++){
//						cout<<i<<j<<f[i][kk]<<f[j][l]<<endl;
						if(f[i][kk]!=j&&f[j][l]!=i&&f[i][kk]!=f[j][l]){
							ans=max(ans,num[f[i][kk]]+num[f[j][l]]+num[i]+num[j]);
						}
					}
				}
			}
			
		}
	}
	cout<<ans;
	ret 0;
}
2023/9/26 21:29
加载中...