QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#491855 | #4599. Orgrimmar | fractal# | AC ✓ | 845ms | 90112kb | C++17 | 1.0kb | 2024-07-25 23:38:30 | 2024-07-25 23:38:30 |
Judging History
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