S T1 70pts Help!
  • 板块学术版
  • 楼主Knighthood
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/10/31 21:21
  • 上次更新2023/10/27 04:40:34
查看原帖
S T1 70pts Help!
486001
Knighthood楼主2022/10/31 21:21
#include<iostream>
#include<vector>
#include<cstring>
#include<queue>

using namespace std;
using ll = long long;

const int N=2505;

int n, m, k, vis[N][N], V[N];
vector<int> T[N], E[N];
ll v[N], dis[N], f[N][4], Fd[N][4];

void Read(){
	cin >> n >> m >> k;
	for(int i = 2; i <= n; ++i)
		cin >> v[i];
	for(int i = 1; i <= m; ++i){
		int a, b;
		cin >> a >> b;
		E[a].push_back(b);
		E[b].push_back(a);
	}
}

void Bfs(int i){
	memset(dis, 0x3f, sizeof dis);
	dis[i] = -1;
	queue<int> q;
	q.push(i);
	while(!q.empty()){
		int u = q.front();
		q.pop();
		for(auto v:E[u]){
			if(dis[v] > dis[u] + 1){
				dis[v] = dis[u] + 1;
				q.push(v);
			}
		}
	}
//	for()
	for(int j = 1; j <= n; ++j){
		if(dis[j] <= k && j != i){
			vis[i][j] = 1;
			T[i].push_back(j);
		}
	}
}

void Get(int i){
	memset(V, 0, sizeof V);
	for(auto j:T[i]){
		if(j == 1 || V[j])
			continue;
		V[j] = 1;
		if(v[j] >= f[i][1]){
			f[i][3] = f[i][2], Fd[i][3] = Fd[i][2];
			f[i][2] = f[i][1], Fd[i][2] = Fd[i][1];
			f[i][1] = v[j], Fd[i][1] = j;
		}
		else if(v[j] >= f[i][2]){
			f[i][3] = f[i][2], Fd[i][3] = Fd[i][2];
			f[i][2] = v[j], Fd[i][2] = j;
		}
		else if(v[j] >= f[i][3]){
			f[i][3] = v[j], Fd[i][3] = j;
		}
	}
}

void Init(){
	for(int i = 1; i <= n; ++i)
		Bfs(i);
	for(int i = 1; i <= n; ++i)
		Get(i);
}

void Solve(){
	ll ans=0;
	for(int a = 2; a <= n; ++a){
		if(!vis[1][a])
			continue;
		for(int c = 2; c <= n; ++c){
			if(a == c)
				continue;
			for(int i = 1; i < 4; ++i){
				for(int j = 1; j < 4; ++j){
					int b = Fd[a][i];
					int d = Fd[c][j];
					if(b == 1 || d == 1 || b == c || d == a || b == d || !vis[d][1] || !vis[b][c])
						continue;
					ans = max(ans, v[a] + v[b] + v[c] + v[d]);
				}
			}
		}
	}
	cout << ans;
}

int main(){
//	freopen("holiday3.in","r",stdin);
	ios_base::sync_with_stdio(false);
	cin.tie(NULL),cout.tie(NULL);
	
	Read();
	Init();
	Solve();
	
	return 0;
}
2022/10/31 21:21
加载中...