QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#186194#6438. CrystalflyshimemingAC ✓336ms28592kbC++202.0kb2023-09-23 12:40:422023-09-23 12:40:43

Judging History

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

  • [2023-09-23 12:40:43]
  • 评测
  • 测评结果:AC
  • 用时:336ms
  • 内存:28592kb
  • [2023-09-23 12:40:42]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define debug(x) {cerr << #x << " = " << x << '\n'; }

#define X first
#define Y second
#define pb push_back
#define int long long

const int MAXN = 1e5+5;
int n;
ll a[MAXN];
int t[MAXN];
vector<vector<int>> G;
vector<vector<ll>> dp;

ll dfs(int ind, int p, bool skip) {
  assert(n!=1);
  if (ind != 0 && G[ind].size() == 1) {
    return 0;
  }
  if (dp[ind][skip] != 0) return dp[ind][skip];
  ll rt = -1;
  ll sum = 0, maxn = -1, maxn31 = -1, maxn32 = -1;
  vector<pair<int, ll>> sub;
  for (int i : G[ind]) {
    if (i == p) continue;
    int tmp = dfs(i, ind, 0);
    sum += tmp;
    if (maxn == -1 || a[i] > a[maxn]) maxn = i;
    if (t[i] == 3) {
      if (maxn32 == -1 || a[i] >= a[maxn32]) {
        maxn32 = i;
        if (maxn31 == -1 || a[maxn32] >= a[maxn31]) swap(maxn31, maxn32);
      }
    }
  }
  if (skip) {
    dp[ind][skip] = sum;
    return sum;
  }
  rt = sum + a[maxn];
  if (G[ind].size() > 2 && maxn31 != -1) {
    for (int i : G[ind]) {
      if (i == p) continue;
      if (i == maxn31) {
        if (maxn32 == -1) continue;
        rt = max(rt, sum - dfs(i, ind, 0) + dfs(i, ind, 1) + a[i] + a[maxn32]);
        continue;
      } else {
        rt = max(rt, sum - dfs(i, ind, 0) + dfs(i, ind, 1) + a[i] + a[maxn31]);
      }
    }
  }
  dp[ind][skip] = rt;
  return rt;
}

signed main(){
  ios::sync_with_stdio(0);
  cin.tie(0);
  int T; cin >> T;
  while (T--) {
    cin >> n;
    G.resize(n+1);
    dp.resize(n+1, vector<ll>(2));
    for (int i = 1; i <= n; i++) cin >> a[i];
    for (int i = 1; i <= n; i++) cin >> t[i];
    for (int i = 1; i <= n-1; i++) {
      int x, y; cin >> x >> y;
      G[x].pb(y);
      G[y].pb(x);
    }
    if (n == 1) {
      cout << a[1] << '\n';
      continue;
    }
    t[1] = 2;
    G[0].pb(1);
    G[1].pb(0);
    dfs(0, -1, 0);
    cout << dp[0][0] << '\n';
    G.clear();
    dp.clear();
  }
  return 0;
}

詳細信息

Test #1:

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

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: 0ms
memory: 3484kb

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: 116ms
memory: 3836kb

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: 114ms
memory: 3812kb

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: 326ms
memory: 16700kb

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: 336ms
memory: 16416kb

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: 256ms
memory: 28592kb

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: 235ms
memory: 22800kb

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