hack数据wa一堆求调
查看原帖
hack数据wa一堆求调
315398
小杨小小杨楼主2024/8/4 13:22
#include<bits/stdc++.h>
using namespace std;
int i,j,k,n,m,l,dis[2510],head[2510],a[2510],x,y,tot;
struct Edge{int to,nex;}edge[5000100];
struct Node{long long sum;int id;}ma[2510][5];
queue<int> p;
long long ans;
bool in[2510][2510],vis[2510];
Node make(long long _sum,int _id){Node h;h.sum=_sum;h.id=_id;return h;}
void ins(int x,int y){edge[tot].nex=head[x];edge[tot].to=y;head[x]=tot++;}
void sc(int x){
	memset(dis,0x3f,sizeof(dis));
	memset(vis,0,sizeof(vis));
	p.push(x);dis[x]=0;
	while (!p.empty()){
		int h=p.front();p.pop();
		if (vis[h]) continue;
		vis[h]=1;
		for (int i=head[h];~i;i=edge[i].nex){
			int u=edge[i].to;
			if (!vis[u]&&dis[u]>dis[h]+1&&dis[h]<=k) 
				dis[u]=dis[h]+1,p.push(u),in[x][u]=in[u][x]=true;
		}
	}
}
int main(){
	scanf("%d%d%d",&n,&m,&k);
	memset(head,-1,sizeof(head));
	for (i=2;i<=n;i++) scanf("%d",&a[i]);
	for (i=1;i<=m;i++) scanf("%d%d",&x,&y),ins(x,y),ins(y,x);
	for (i=1;i<=n;i++) sc(i);
	for (i=1;i<=n;i++) ma[i][1].id=ma[i][2].id=ma[i][3].id=-1;
	for (i=2;i<=n;i++)
		for (j=2;j<=n;j++)
			if (i!=j&&in[1][i]&&in[i][j]){
				long long sum=a[i]+a[j];
				if (sum>ma[j][1].sum) ma[j][3]=ma[j][2],ma[j][2]=ma[j][1],ma[j][1]=make(sum,i);
				else if (sum>ma[j][2].sum) ma[j][3]=ma[j][2],ma[j][2]=make(sum,i);
				else if (sum>ma[j][3].sum) ma[j][3]=make(sum,i);
			}
	for (i=2;i<=n;i++)
		for (j=2;j<=n;j++)
			if (in[i][j])
				for (k=1;k<=3;k++)
					for (l=1;l<=3;l++)
						if (ma[i][k].id!=-1&&ma[j][l].id!=-1&&ma[i][k].id!=ma[j][l].id&&ma[i][k].id!=j&&ma[j][l].id!=i)
							ans=max(ans,ma[j][l].sum+ma[i][k].sum);
	printf("%lld\n",ans);
	return 0;
}

2024/8/4 13:22
加载中...