求调,悬关
查看原帖
求调,悬关
264463
添哥楼主2023/7/8 16:35

80pts80pts,大样例没有过(输出 38993899),#40WA,#44,45TLE,#46RE

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int n,m,k;
long long v[2505];
bool e[2505][2505];
bool ok[2505][2505];
int f[2505][6];
int step[2505];
int q[25005];
inline bool cmp(int a,int b)
{
	return v[a]>v[b];
}
void bfs(int i)
{
	int ql=1,qr=2;
	q[1]=i;
	step[i]=0;
	while(ql!=qr)
	{
		int now=q[ql];
		ql++;
		if(now!=i)
		{
			ok[i][now]=1;
			if(i!=1&&ok[1][now]&&f[i][1]!=now&&f[i][2]!=now&&f[i][3]!=now)
			{
				f[i][4]=now;
				sort(f[i]+1,f[i]+5,cmp);
			}
		}
		if(step[now]>k)
		{
			continue;
		}
		for(int j=1;j<=n;j++)
		{
			if(e[now][j]&&!ok[i][j])
			{
				step[j]=step[now]+1;
				q[qr]=j;
				qr++;
			}
		}
	}
}
int main()
{
//	freopen("holiday3.in","r",stdin);
//	freopen("out.txt","w",stdout);
	cin>>n>>m>>k;
	for(int i=2;i<=n;i++)
	{
		cin>>v[i];
	}
	for(int i=1;i<=m;i++)
	{
		int x,y;
		cin>>x>>y;
		e[x][y]=1;
		e[y][x]=1;
	}
	for(int i=1;i<=n;i++)
	{
		bfs(i);
	}
	long long ans=0;
	for(int b=2;b<=n;b++)
	{
		for(int c=b+1;c<=n;c++)
		{
			if(ok[b][c])
			{
				for(int i=1;i<=3;i++)
				{
					int a=f[b][i];
					for(int j=1;j<=3;j++)
					{
						int d=f[c][j];
						if(a!=c&&b!=d&&a!=d&&a!=0&&d!=0)
						{
							ans=max(ans,v[a]+v[b]+v[c]+v[d]);
						}
					}
				}
			}
		}
	}
	cout<<ans;
	return 0;
}

感激不尽

2023/7/8 16:35
加载中...