记录编号 595836 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [CSP 2022S]假期计划 最终得分 100
用户昵称 Gravatar健康铀 是否通过 通过
代码语言 C++ 运行时间 3.239 s
提交时间 2024-10-17 20:21:38 内存使用 27.06 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,m,k,cnt,he[200010],a[200010],vis[200010],d[2510][2510],s[2510][2510],v[2510][2510],w[2510][3],maxx;
struct node{
	long long v;
	long long nx;
}e[200010];
void add(long long x,long long y){
	e[++cnt].v=y,e[cnt].nx=he[x],he[x]=cnt;
} 
void p(long long x,long long y){
	if(a[y]>a[w[x][1]]){
		w[x][2]=w[x][1];
		w[x][3]=w[x][2];
		w[x][1]=y;
	}
	else if(a[y]>a[w[x][2]]){
		w[x][3]=w[x][2];
		w[x][2]=y;
	}
	else{
		if(a[y]>a[w[x][3]])
		w[x][3]=y;
	}
}
int main(){
	freopen("csp2022_holiday.in", "r", stdin); 
    freopen("csp2022_holiday.out", "w", stdout);
	cin>>n>>m>>k;
	for(int i=2;i<=n;i++){
		cin>>a[i];
	}
	for(long long i=1;i<=m;i++){
		long long x,y;
		cin>>x>>y;
		s[x][y]=1;
		add(x,y);
		add(y,x);
	}
	for(long long k1=1;k1<=n;k1++){
		queue<long long> q;
		memset(vis,0,sizeof(vis));
		q.push(k1);
		vis[k1]=1;
		while(!q.empty()){
			long long x=q.front();
			q.pop();
			for(long long i=he[x];i;i=e[i].nx){
				long long y=e[i].v;
				if(k1==y)
				continue;
				
				if(vis[y]==0&&v[k1][x]<=k){s[k1][y]=1;
					vis[y]=1;
					q.push(y);
					v[k1][y]=v[k1][x]+1;

				}
			}
		}
	}
	for(long long i=2;i<=n;i++){
		for(long long j=2;j<=n;j++){
			
			if(j==i)continue;
			if((s[i][j]==1||s[j][i]==1)&&(s[1][j]==1&&s[j][1]==1)){
				p(i,j);
			}
		}
	}
	for(long long i=2;i<=n;i++){
		for(long long j=2;j<=n;j++){
			if(j==i)continue;
			for(long long uu=1;uu<=3;uu++){
				for(long long vv=1;vv<=3;vv++){
					if(s[i][j]==0)
					continue;
					if(w[i][uu]==0||w[j][vv]==0)
					continue;
					if(w[i][uu]==w[j][vv]){
						continue;
					}
					if(w[i][uu]==j||w[j][vv]==i)
					continue;
				    
					maxx=max(a[i]+a[j]+a[w[i][uu]]+a[w[j][vv]],maxx);
				}
			}
		}
	}
	cout<<maxx;
	return 0;
}