25 pts 求调
查看原帖
25 pts 求调
253620
binaryBard楼主2022/11/6 12:05

rt

#include <bits/stdc++.h>
using namespace std;
#define N 2505
typedef long long ll;

ll n, m, z, s[N], f[6][N];
bool vis[6][N][N];
vector<ll> G[N], te[N];

void addEdge(int u, int v) {
	G[u].push_back(v);
	te[u].push_back(v);
}

int main() {
	//freopen("holiday.in", "r", stdin);
	//freopen("holiday.out", "w", stdout);
	cin >> n >> m >> z;
	for (int i = 2; i <= n; i++) {
		scanf("%lld", &s[i]);
	}
	for (int i = 1; i <= m; i++) {
		int u, v;
		scanf("%d%d", &u, &v);
		addEdge(u, v);
		addEdge(v, u);
	}
	//步数内可以达到的景点
	if (z != 0) {
		for (int i = 1; i <= n; i++) {
			//int la = 0;
			map<ll, bool> v;
			v.clear();
			for (int k = 1; k <= z; k++) {
				for (int j = 1; j <= k; j++) {
					int q = 0, s = G[i].size();
					//cout << q << s << la << endl;
					for (q = 0; q < s; q++) {
						int t = G[i][q];
						for (int p = 0; p < te[t].size(); p++) {
							//if (!G[i][G[t][p]])
							if (te[t][p] != i && !v[te[t][p]]) {
								G[i].push_back(te[t][p]);
								v[te[t][p]] = 1;
							}
						}
					}
					//la = q;
					//cout << q << ' ' << G[i].size() << ' ' << la << endl;
				}
			}
			//cout << endl;
		}
	}
//	cout << "sdfsdgsagsfgasdfgasg" << endl;
//	for (int i = 1; i <= n; i++) {
//		for (int j = 0; j < G[i].size(); j++) {
//			cout << G[i][j] << " ";
//		}
//		cout << endl;
//	}
	//统计最大值
	for (int i = 1; i <= 5; i++) {
		for (int j = 0; j <= ((i == 5) ? 1 : n); j++) {
			int t = 0;
			for (int k = 0; k < G[j].size(); k++) {
				if (!vis[i - 1][G[j][k]][j]) {
					if (f[i][j] <= f[i - 1][G[j][k]] + s[j])
						t = G[j][k];
					f[i][j] = max(f[i][j], f[i - 1][G[j][k]] + s[j]);
				}
			}
			vis[i][j][j] = 1;
			for (int k = 0; k <= n; k++) {
				if (vis[i - 1][t][k])
					vis[i][j][k] = 1;
			}
//			cout << i << " " << j << " " << t << " " << f[i][j] << endl;
//			for (int k = 1; k <= n; k++)
//				cout << vis[i][j][k];
//			cout << endl;
		}
	}
	cout << f[5][1] << endl;
	//cout << (sizeof(vis) + sizeof(f) + sizeof(G) + sizeof(te)) / (1 << 20);
	return 0;
}
2022/11/6 12:05
加载中...