QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#668261#6438. CrystalflyKdlyhAC ✓507ms36012kbC++201.5kb2024-10-23 13:11:522024-10-23 13:11:52

Judging History

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

  • [2024-10-23 13:11:52]
  • 评测
  • 测评结果:AC
  • 用时:507ms
  • 内存:36012kb
  • [2024-10-23 13:11:52]
  • 提交

answer

#include<bits/stdc++.h>

#ifndef ONLINE_JUDGE
#include "debug.h"
#else
#define debug(...) 42
#endif

using i64 = long long;

namespace ranges = std::ranges;

//ti = 3, 可以多选一个旁支
//ti < 3, 只能选一条路

template<class T> void chmax(T& a, const T b) {a = a > b ? a : b;}

void solve()
{
#define tests
    int n; std::cin >> n; std::vector<int> a(n); std::vector<int> t(n); for (auto& ai : a) {std::cin >> ai;} for (auto& ti : t) {std::cin >> ti;}
    std::vector adj(n, std::vector<int>()); for (int i = 0, u, v; i + 1 < n; i++) {std::cin >> u >> v; --u; --v; adj[u].push_back(v); adj[v].push_back(u);}

    std::vector<i64> dp(n), sum(n);     
    auto dfs = [&](auto self, int now, int fa) -> void {
        for (auto& to : adj[now]) if (to != fa) {self(self, to, now); sum[now] += dp[to];}
        
        std::set<std::pair<i64, int>> S; for (auto& to : adj[now]) if (to != fa) {S.emplace(-dp[to] + a[to] + sum[to], to);}
        auto get_max_except = [&](int id) {auto it{std::rbegin(S)}; if (it->second == id) {it++;} return (it == std::rend(S)) ? 0 : it->first;};
        
        for (auto& w : adj[now]) if (w != fa) {
            chmax(dp[now], sum[now] + a[w]);
            if (t[w] == 3) {chmax(dp[now], sum[now] + get_max_except(w) + a[w]);}
        }
    };
    dfs(dfs, 0, -1);
    std::cout << dp[0] + a[0] << "\n";
}

signed main()
{
   std::cin.tie(nullptr)->sync_with_stdio(false);
   int _(1);
#ifdef tests
   std::cin >> _;
#endif
   while(_--) solve();
   return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3552kb

input:

2
5
1 10 100 1000 10000
1 2 1 1 1
1 2
1 3
2 4
2 5
5
1 10 100 1000 10000
1 3 1 1 1
1 2
1 3
2 4
2 5

output:

10101
10111

result:

ok 2 number(s): "10101 10111"

Test #2:

score: 0
Accepted
time: 1ms
memory: 3540kb

input:

10
6
8 1 1 5 8 9
2 1 2 2 2 2
1 2
2 3
2 4
1 5
2 6
6
6 4 4 1 3 6
2 1 3 3 3 3
1 2
1 3
3 4
4 5
5 6
6
10 5 1 8 5 1
1 3 1 2 2 2
1 2
2 3
2 4
2 5
3 6
10
6 8 8 9 6 9 5 6 6 4
2 1 3 3 2 2 2 2 3 1
1 2
1 3
3 4
4 5
5 6
4 7
2 8
7 9
9 10
7
10 9 1 5 7 5 4
1 1 1 2 1 3 2
1 2
1 3
3 4
3 5
5 6
1 7
5
7 1 1 4 2
3 1 3 2 2
1...

output:

25
24
24
56
31
14
16
28
19
19

result:

ok 10 numbers

Test #3:

score: 0
Accepted
time: 118ms
memory: 3620kb

input:

100000
10
9 1 7 9 5 1 10 5 3 8
2 1 1 3 1 2 2 3 3 1
1 2
2 3
3 4
1 5
2 6
2 7
6 8
7 9
7 10
3
6 6 1
2 1 2
1 2
1 3
10
6 5 3 7 1 5 1 9 7 3
3 1 3 3 1 3 2 2 2 3
1 2
1 3
3 4
4 5
2 6
6 7
4 8
7 9
1 10
7
2 8 9 7 7 9 10
2 3 2 2 3 2 1
1 2
2 3
1 4
3 5
4 6
3 7
1
8
1
1
4
2
7
9 9 9 8 4 2 7
3 1 2 1 1 1 1
1 2
2 3
2 4
3...

output:

49
12
41
45
8
4
38
22
20
21
5
19
23
44
26
5
21
28
28
32
36
15
5
26
38
36
20
35
27
36
20
9
32
32
22
11
41
15
20
54
38
20
45
36
20
29
24
4
37
44
30
45
17
17
36
29
3
6
24
44
25
28
50
13
5
1
44
27
17
21
15
17
17
24
29
39
10
39
38
26
22
24
9
17
41
7
28
33
51
18
14
14
7
35
23
13
11
43
30
24
35
2
43
33
17
...

result:

ok 100000 numbers

Test #4:

score: 0
Accepted
time: 126ms
memory: 3724kb

input:

1000
420
4 7 10 4 6 9 7 9 3 5 3 10 7 2 8 4 4 7 9 4 3 7 1 10 1 5 4 5 3 9 6 4 2 8 7 1 1 10 2 2 2 4 2 1 3 2 4 8 2 1 6 3 2 5 4 9 9 9 5 9 5 2 2 5 4 2 10 9 1 10 7 4 8 4 10 10 6 2 10 2 3 2 6 2 3 3 2 9 8 5 3 1 6 3 4 5 6 1 7 6 10 7 7 8 2 6 10 10 9 8 6 2 9 7 7 10 4 5 9 2 10 9 9 10 1 5 1 6 1 1 4 8 2 5 7 7 4 10...

output:

1633
2047
3251
576
3701
2231
700
2254
105
1518
3179
914
1396
2417
2019
3397
3013
3659
443
2773
3354
110
3445
888
2380
1525
2881
1841
1969
810
752
1026
1794
3273
3021
2011
3307
3832
95
51
3731
1374
2842
1675
1960
1118
431
2199
2747
3882
1305
971
1490
3028
908
73
2376
1341
1821
3565
721
3195
2388
266
...

result:

ok 1000 numbers

Test #5:

score: 0
Accepted
time: 488ms
memory: 12364kb

input:

10
99991
10 6 5 5 7 1 4 5 2 3 9 5 4 9 2 10 8 3 6 9 4 4 4 2 10 8 8 4 8 5 10 6 8 9 2 5 6 10 9 8 2 1 2 6 9 10 7 1 8 1 8 3 5 3 9 8 2 8 1 3 7 3 5 3 1 10 8 1 3 10 6 7 5 3 10 6 10 6 5 5 2 5 1 8 4 4 8 6 8 7 4 1 3 1 10 2 3 5 2 6 10 4 1 6 1 10 5 4 2 8 8 6 9 6 5 8 10 8 2 4 8 2 2 7 9 5 7 8 9 2 9 10 3 9 1 9 6 7 ...

output:

385673
385638
385999
385351
383937
385702
384372
386280
385985
383976

result:

ok 10 numbers

Test #6:

score: 0
Accepted
time: 507ms
memory: 12300kb

input:

10
100000
691638189 376118101 486584606 394669567 486373897 939526687 503807724 278251188 231412672 45682405 745048495 28500413 156838889 12700279 797455152 755903587 326532893 701805548 78389204 486114025 367059077 361684203 829984938 129623201 460608105 143355017 412267713 65576852 778434431 93425...

output:

35466839477975
35514425587777
35461993022217
35475724605159
35564188763634
35640546302274
35641995513963
35686586117287
35536376359863
35605912922111

result:

ok 10 numbers

Test #7:

score: 0
Accepted
time: 285ms
memory: 36012kb

input:

10
99995
84858301 147496073 555948385 755493899 790427326 752195181 302302440 279635456 464535302 606782338 170553531 791509094 500796960 353102692 659801138 547244567 807600470 547009591 831176050 525406957 885722892 446683877 240520416 817746097 580155412 595574043 942015203 24512946 378725451 395...

output:

49789565036402
49906949178594
49939507193075
50150069484316
49922940531510
50138902547182
49988715524002
50084859317301
50155505003722
50051981684634

result:

ok 10 numbers

Test #8:

score: 0
Accepted
time: 395ms
memory: 27252kb

input:

10
99999
457859907 940473195 693318692 12318672 13733365 917623091 458582505 208500503 914054213 679912356 928272558 655395186 826512890 459725698 702695255 748285967 869848527 540446227 965631810 771687238 506164324 540163930 354152058 821643041 578233412 673793657 965135940 121043329 258633321 872...

output:

24975379263129
24903857589285
24946010682571
25113930005155
25038661368497
24937493169990
25073187919093
24952572373741
24930855990405
25025151559800

result:

ok 10 numbers