QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#491855#4599. Orgrimmarfractal#AC ✓845ms90112kbC++171.0kb2024-07-25 23:38:302024-07-25 23:38:30

Judging History

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

  • [2024-07-25 23:38:30]
  • 评测
  • 测评结果:AC
  • 用时:845ms
  • 内存:90112kb
  • [2024-07-25 23:38:30]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

const int N = 5e5 + 200;

int n, dp[3][N];
vector<int> g[N];

void dfs(int v, int p = -1) {
    dp[0][v] = dp[1][v] = dp[2][v] = 0;
    for (int u : g[v]) {
        if (u == p) continue;
        dfs(u, v);
        dp[0][v] += max({dp[0][u], dp[1][u], dp[2][u]});
        dp[1][v] += dp[0][u];
    }
    dp[1][v]++;
    for (int u : g[v]) {
        if (u == p) continue;
        dp[2][v] = max(dp[2][v], dp[1][v] - dp[0][u] + dp[1][u]);
    }
}

void solve() {
    cin >> n;
    for (int i = 1; i <= n; ++i) g[i].clear();
    for (int i = 1, v, u; i < n; ++i) {
        cin >> v >> u;
        g[v].push_back(u);
        g[u].push_back(v);
    }
    dfs(1);
    cout << max({dp[0][1], dp[1][1], dp[2][1]}) << '\n';
}

int main() {
    int size (512 << 20); // 512 M
    __asm__ ( "movq %0, %%rsp\n"::"r"((char*)malloc(size)+size));
    ios_base::sync_with_stdio(0), cin.tie(0);
    int t = 1;
    cin >> t;
    while (t--) solve();
    exit (0);
}

詳細信息

Test #1:

score: 100
Accepted
time: 845ms
memory: 90112kb

input:

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

output:

333334
499999
374859
374664
374655
374764
374530
374548
374848
374511

result:

ok 10 lines