QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#627609 | #6437. Paimon's Tree | Corzica | WA | 71ms | 24616kb | C++14 | 2.4kb | 2024-10-10 16:28:03 | 2024-10-10 16:28:04 |
Judging History
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'