Maex
题解
用表示u子树节点个数,dp[u]表示u子树内sum(b_i)可以达到的最大值。
那么考虑转移,u本身的b[u]一定可以是sz[u],而因为a必须两两不同,0只能在u的某个子树内,所以除了某个子树,其他子树节点的b_i一 定都为0. 那么转移就是:
复杂度
标程
#include <bits/stdc++.h>
using namespace std;
const int N = 500000 + 10;
vector<int> g[N];
int siz[N];
long long dp[N];
void dfs(int u, int fr){
siz[u] = 1;
dp[u] = 0;
for(auto v : g[u]){
if(v == fr) continue;
dfs(v, u);
siz[u] += siz[v];
dp[u] = max(dp[u], dp[v]);
}
dp[u] += siz[u];
}
int main(){
ios::sync_with_stdio(false); cin.tie(0);
int T; cin >> T;
while(T--){
int n; cin >> n;
for(int i = 0; i < n; i++) g[i].clear();
for(int i = 1; i < n; i++){
int u, v; cin >> u >> v;
--u; --v;
g[u].emplace_back(v);
g[v].emplace_back(u);
}
dfs(0, -1);
cout << dp[0] << "\n";
}
return 0;
}