官方90求调
查看原帖
官方90求调
287217
tanyanling楼主2022/11/14 21:44
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
long long score[2501];
vector<pair<long long,int> >way[2501];
vector<pair<int,int> >ori[2501];
int dist[2501][2501],ne[2501][2501];
bool vis[2501];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >que;
void dij(int x,int s)
{
	dist[s][x]=0;
	que.push(make_pair(0,x));
	while(que.size())
	{
		int tmp=que.top().second;
		que.pop();
		if(vis[tmp])
			continue;
		vis[tmp]=1;
		for(int i=0;i<ori[tmp].size();i++)
		{
			int to=ori[tmp][i].second;
			dist[s][to]=min(dist[s][to],dist[s][tmp]+ori[tmp][i].first);
			if(!vis[to])
				que.push(make_pair(dist[s][to],to));
		}
	}
}
int main()
{
	scanf("%d%d%d",&n,&m,&k);
	for(int i=2;i<=n;i++)
		scanf("%lld",&score[i]);
	for(int i=1;i<=m;i++)
	{
		int from,to;
		scanf("%d%d",&from,&to);
		ori[from].push_back(make_pair(1,to));
		ori[to].push_back(make_pair(1,from));
	}
	for(int i=0;i<=2500;i++)
		for(int j=0;j<=2500;j++)
			dist[i][j]=INT_MAX;
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<=2500;j++)
			vis[j]=0;
		dij(i,i);
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			dist[i][j]--;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(dist[i][j]<=k&&i!=j)
				ne[i][j]=1;
	for(int i=2;i<=n;i++)
	{
		priority_queue<pair<int,long long>,vector<pair<int,long long> >,less<pair<int,long long> > >q;
		
		for(int j=2;j<=n;j++)
			if(i!=j&&ne[i][j]==1&&ne[1][i]==1)
				q.push(make_pair(score[i]+score[j],j));
		
		while(way[i].size()<3&&q.size())
		{
			way[i].push_back(q.top());
			q.pop();
		}
	}
	long long maxn=0;
	for(int i=2;i<=n;i++)
	{
		for(int j=2;j<=n;j++)
		{
			if(i!=j)
			{
				for(int p=0;p<way[i].size();p++)
				{
					for(int q=0;q<way[j].size();q++)
					{
						if(way[i][p].second!=way[j][q].second&&i!=way[j][q].second&&j!=way[i][p].second&&ne[way[i][p].second][way[j][q].second]==1)
						{
							maxn=max(maxn,way[i][p].first+way[j][q].first);
						}
					}
				}
			}
		}
	}
	printf("%lld",maxn);
	return 0;
}

记录

2022/11/14 21:44
加载中...