QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#627609#6437. Paimon's TreeCorzicaWA 71ms24616kbC++142.4kb2024-10-10 16:28:032024-10-10 16:28:04

Judging History

你现在查看的是最新测评结果

  • [2024-10-10 16:28:04]
  • 评测
  • 测评结果:WA
  • 用时:71ms
  • 内存:24616kb
  • [2024-10-10 16:28:03]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
long long f[155][155][365], maxn[155][155][365], siz[155][155], pre[155][155];
vector<pair<int, int>> vv[155];
int n, qwe, a[155], cnt, sum[155];
int maxa, maxb;
vector<int> to[155];
inline void gets(int p, int q, int name) {
	siz[name][p] = 1;
	for (int i : to[p]) {
		if (i != q) gets(i, p, name), siz[name][p] += siz[name][i];
	}
}
inline void finds(int p, int q, int w, int from) {
	pre[p][from] = q;
	if (p != from)vv[w].push_back(make_pair(p, from));
	for (int i : to[p]) {
		if (i != q) finds(i, p, w + 1, from);
	}
}
signed main() {
//	freopen("ex_length2.in", "r", stdin);
//	freopen("length.out", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> qwe;
	while (qwe--) {
		cin >> n;
		n++;
		int p, q;
		for (int i = 1; i < n; i++) cin >> a[i];
		for (int i = 1; i < n; i++) {
			vv[i].clear();
			cin >> p >> q;
			to[p].push_back(q), to[q].push_back(p);
		}
		for (int i = 1; i <= n; i++) {
			for (int j : to[i]) {
				gets(j, i, i);
			}
		}
		for (int i = 1; i <= n; i++) {
			finds(i, 0, 0, i);
			vv[0].push_back(make_pair(i, i));
		}
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				for (int k = 0; k <= n + 3; k++) {
					f[i][j][k] = maxn[i][j][k] = -0x3f3f3f3f3f3f3f3f;
				}
			}
		}
		for (int i = 1; i <= n; i++) {
			f[i][i][n - 1] = 0;
			for (int j = 0; j <= n - 1; j++) maxn[i][i][j] = 0;
		}
		for (int len = 1; len < n; len++) {
			for (int i = 0; i < vv[len].size(); i++) {
				int l = vv[len][i].first, r = vv[len][i].second;
				int prel = pre[l][r], prer = pre[r][l];
				for (int k = 0; k <= n - len; k++) {
					f[l][r][k] = max(f[l][r][k], maxn[prel][r][max(k + 1ll, siz[prel][l])] + a[(n - 1 - len) - k + len]);
				}
				for (int k = 0; k <= n - len; k++) {
					f[l][r][k] = max(f[l][r][k], maxn[l][prer][max(k + 1ll, siz[prer][r])] + a[(n - 1 - len) - k + len]);
//					cout << l << " " << r << " " << k << ' ' << f[l][r][k] << ' ' << len << "@\n";
				}
				for (int k = n; k >= 0; k--) {
					maxn[l][r][k] = max(maxn[l][r][k + 1], f[l][r][k]);
				}
			}
		}
		long long ans = 0;
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				ans = max(ans, maxn[i][j][0]);
			}
		}
		cout << ans << "\n";
		for (int i = 1; i <= n; i++) to[i].clear();
	}
}
//1
//5
//1 5 5 3 10
//2 1
//3 1
//4 1
//5 4
//6 2

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 11904kb

input:

2
5
1 7 3 5 4
1 3
2 3
3 4
4 5
4 6
1
1000000000
1 2

output:

16
1000000000

result:

ok 2 number(s): "16 1000000000"

Test #2:

score: -100
Wrong Answer
time: 71ms
memory: 24616kb

input:

5000
19
481199252 336470888 634074578 642802746 740396295 773386884 579721198 396628655 503722503 971207868 202647942 2087506 268792718 46761498 443917727 16843338 125908043 691952768 717268783
9 4
4 18
12 9
10 9
4 1
6 12
2 18
9 13
6 14
4 8
2 3
10 17
2 20
19 20
5 1
12 15
15 16
4 7
17 11
4
240982681 ...

output:

5750811120
1896999359
4208559611
4140156713
5361004844
1875024569
3690026656
3702623113
3412485417
7807375141
5341435147
2355946110
3090496776
5626636202
4729664767
2207592767
572868833
4759005973
2944749369
2538044586
3083947956
5757497518
1421427135
3971435093
1197051728
396588615
251138097
221986...

result:

wrong answer 48th numbers differ - expected: '5317528311', found: '5514819848'