75pts求调
查看原帖
75pts求调
408747
杨xyz楼主2022/11/8 10:07
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2510,M=1e5+10;
int he[M],e[M],ne[M],w[M],idx=0;
void add(int x,int y,int z){
	w[++idx]=z;e[idx]=y;ne[idx]=he[x];he[x]=idx;
} 
int d[N][N];
int a[N],vis[N];
int n,m,k;
typedef pair<int,int>pll;
queue<int>q;
void bfs(int x)
{
	for (int i=1;i<=n;++i) vis[i]=0,d[x][i]=1e18+10;
	vis[x]=1,d[x][x]=0,q.push(x);
	while(!q.empty())
	{
		int top=q.front();q.pop();
		for (int i=he[top];i;i=ne[i])
			if (!vis[e[i]]&&d[x][top]<=k+1)
				vis[e[i]]=1,d[x][e[i]]=d[x][top]+1,q.push(e[i]);
	}
	return;
}
struct node{
	int x,y,ans;
}fuckccf[M];
int cmp(node x,node y){
	return x.ans<y.ans;
	return x.x<y.x;
	return x.y<y.y;
}
main(){
	cin>>n>>m>>k;
	for(int i=2;i<=n;i++)cin>>a[i];
	for(int i=1;i<=m;i++){
		int x,y;
		cin>>x>>y;
		add(x,y,1);add(y,x,1);
	}
	for(int i=1;i<=n;i++){
		bfs(i);
	}
	int sum=0;
	for(int i=2;i<=n;i++){
		if(d[1][i]>k+1)continue;
		for(int j=2;j<=n;j++){
		    if(j==i)continue;
			if(d[i][j]>k+1)continue;
			else{
				fuckccf[++sum]={i,j,a[i]+a[j]};
			}
		}
	} 
	sort(fuckccf+1,fuckccf+sum+1,cmp);
	int ans=0;
	for(int i=1;i<=sum;i++){
		for(int j=1;j<=sum;j++){
			if(fuckccf[i].x==fuckccf[j].y)continue;
			if(fuckccf[i].x==fuckccf[j].x)continue;
			if(fuckccf[i].y==fuckccf[j].y)continue;
			if(fuckccf[i].y==fuckccf[j].x)continue;
			if(d[fuckccf[i].y][fuckccf[j].y]<=k+1){
				if(fuckccf[i].ans+fuckccf[j].ans>ans){
					ans=max(ans,fuckccf[i].ans+fuckccf[j].ans);
				} 
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}
2022/11/8 10:07
加载中...