WA on Sub1#5 求助qwq
查看原帖
WA on Sub1#5 求助qwq
544773
JoeZ009楼主2023/8/11 16:56
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2510;
int n,m,k;
bool con[N][N];
vector<int>l[N];
int w[N];

int dis[N];
vector<int> near_home;

int can_go[N][3];
void Dis(int u) {
	for(int i=1ll; i<=n; i++)dis[i]=-2ll;
	dis[u]=-1ll;
	queue<int>q;
	q.push(u);
	while(q.size()) {
		int x=q.front();
		q.pop();

		if(dis[x]>k)break;

		for(int i=0ll; i<l[x].size(); i++) {
			int j=l[x][i];
			if(dis[j]!=-2ll)continue;
			dis[j]=dis[x]+1ll;
			q.push(j);
		}
	}
	return;
}

signed main() {
	cin>>n>>m>>k;
	for(int i=2ll; i<=n; i++)cin>>w[i];
	while(m--) {
		int x,y;
		cin>>x>>y;
		l[x].push_back(y);
		l[y].push_back(x);
	}

	Dis(1ll);
	for(int i=1ll; i<=n; i++)if(dis[i]!=-2ll&&dis[i]<=k)near_home.push_back(i);

	for(int i=2ll; i<=n; i++) {
		Dis(i);
//		for(int j=1ll;j<=n;j++)cout<<dis[j]<<" ";
//		cout<<endl;
		for(int j=1ll;j<=n;j++)if(dis[j]!=-2ll&&dis[j]<=k)con[i][j]=1ll;
		for(int j=0ll; j<near_home.size(); j++) {
			int t=near_home[j];
			if(t==i||dis[t]==-2ll||dis[t]>k)continue;
			if(w[t]>w[can_go[i][0ll]]) can_go[i][2ll]=can_go[i][1ll],can_go[i][1ll]=can_go[i][0ll],can_go[i][0ll]=t;
			else if(w[t]>w[can_go[i][1ll]])can_go[i][2ll]=can_go[i][1ll],can_go[i][1ll]=t;
			else if(w[t]>w[can_go[i][0ll]])can_go[i][2ll]=t;
		}
	}
	
//	for(int i=1ll;i<=n;i++) {
//		for(int j=0ll;j<3;j++)cout<<can_go[i][j]<<" ";
//		cout<<endl;
//	}
	
	int ans=0ll;
	for(int b=2ll;b<=n;b++) {
		for(int c=b+1ll;c<=n;c++) {
			if(!con[b][c])continue;
			int a=can_go[b][0ll],d=can_go[c][0ll],ai=0ll,di=0ll;
			if(a==c)a=can_go[b][++ai];
			if(d==b)d=can_go[c][++di];
			if(a==d) {
				if(w[a]-w[can_go[b][ai+1ll]]>w[d]-w[can_go[c][di+1ll]])d=can_go[c][++di];
				else a=can_go[b][++ai];
			}
			if(a==c)a=can_go[b][++ai];
			if(d==b)d=can_go[c][++di];
			
			
			if(!a||!d)continue;
			ans=max(w[a]+w[b]+w[c]+w[d],ans);
//			cout<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<w[a]+w[b]+w[c]+w[d]<<endl;
		}
	}
	cout<<ans<<endl;
	return 0ll;
}
2023/8/11 16:56
加载中...