60分求助,WA,悬赏关注
查看原帖
60分求助,WA,悬赏关注
546681
lcbridgeAK CSP-S楼主2023/2/12 20:00

RT,谢谢!

#include <bits/stdc++.h>
using namespace std;
const int maxn=10000+5;
int n,m,k,s[2505],ans;
bool G[2505][2505],vis[2505];
vector <int> g[maxn];
vector <int> f[maxn];
struct pos{
	int x,cnt;
};
int getsocer(int a,int b,int c,int d){
	return s[a]+s[b]+s[c]+s[d];
}
bool cmp(int x,int y){
	return x>y;
}
void bfs(int x){
	memset(vis,0,sizeof(vis));
	queue <pos> q;
	q.push({x,0});    
	while(!q.empty()){
		pos now=q.front();
		q.pop();
		int nu=now.x,nk=now.cnt;
		if(vis[nu])continue;
		vis[nu]=1;
		//cout<<"nu="<<nu<<" nk="<<nk<<endl;
		if(nu!=x){
			G[x][nu]=1;
			if(G[1][nu]&&x!=1){
				f[x].push_back(nu);
				sort(f[x].begin(),f[x].end(),cmp);
				if(f[x].size()>=3)f[x].pop_back();
			}	
		}
		if(nk>k)continue;
		for(int i=0;i<g[nu].size();i++){
			int nnu=g[nu][i];
			if(!vis[nnu])q.push({nnu,nk+1});
		}
	}
} 
bool check(int a,int b,int c,int d){
	if(a!=b&&a!=c&&a!=d&&b!=c&&b!=d&&c!=d)return true;
	return false;
} 
int main(){
	scanf("%d%d%d",&n,&m,&k);
	for(int i=2;i<=n;i++)scanf("%d",&s[i]);
	for(int i=1;i<=m;i++){
		int u,v;
		scanf("%d%d",&u,&v);
		g[u].push_back(v);
		g[v].push_back(u);
	}
	for(int i=1;i<=n;i++)bfs(i);
	for(int i=2;i<=n;i++){
		for(int j=2;j<=n;j++){
			if(i!=j){
				if(G[i][j]){
					for(int a=0;a<f[i].size();a++){ 
						for(int d=0;d<f[j].size();d++){
							//cout<<f[i][a]<<' '<<i<<' '<<j<<' '<<f[j][d]<<endl;
							if(check(i,j,f[i][a],f[j][d]))ans=max(getsocer(i,j,f[i][a],f[j][d]),ans);
						}
					}
				}
			}
		}
	}
	printf("%d",ans);
	return 0;
} 
2023/2/12 20:00
加载中...