C. Infected Tree -树形dp

题面

分析

开始直接贪心,每次找最大子树递归,结果出错了,要用树形dp进行计算,设 d p i dp_i dpi 为当前可以拯救的最大数量,那么可以选择拯救其中一棵子树然后继续递归另一棵子树,所以状态转移方程就是 d p i = m a x ( d p i , t o t a l − d p j + s u m j − 1 ) dp_i = max(dp_i, total - dp_j + sum_j - 1) dpi=max(dpi,totaldpj+sumj1)

代码
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

const int N = 3e5 + 10;

vector<int> adj[N];
int dp[N];
int sum[N];
bool st[N];

void dfs(int u, int fa) {
   
   // cout << u << endl;
    st[u] = true;
    int cnt = 0;
    for(auto j: adj[u]) {
   
        if(st[j]) continue;
        dfs(j, u);
        cnt += dp[j];
        sum[u] += sum[j];
    }
    for(auto j: adj[u]) {
   
        if(j == fa) continue;
        dp[u] = max(dp[u], cnt - dp[j] + sum[j] - 1);
    }
}

void solve() {
   
    int n;
    cin >> n;
    for(int i = 1; i <= n; i ++) {
   
        adj[i].clear();
        st[i] = false;
        sum[i] = 1;
        dp[i] = 0;
    }
    for(int i = 0; i < n - 1; i ++) {
   
        int u, v;
        cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    dfs(1, 0);
 ///   cout << "--------------\n";
    cout << dp[1] << "\n";
}

int main() {
   
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int T;
    cin >> T;
    while(T --) {
   
        solve();
    }
}

相关推荐

  1. 信号塔(树形dp

    2024-01-31 12:00:06       10 阅读
  2. 动态规划-树形DP入门-自上而下树形DP

    2024-01-31 12:00:06       34 阅读
  3. C. Infected Tree -树形dp

    2024-01-31 12:00:06       42 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-31 12:00:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-31 12:00:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-31 12:00:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-31 12:00:06       20 阅读

热门阅读

  1. 【力扣刷题练习】23. 合并 K 个升序链表

    2024-01-31 12:00:06       39 阅读
  2. Android 12.0 监听手机飞行模式

    2024-01-31 12:00:06       34 阅读
  3. vue3源码(四)watch

    2024-01-31 12:00:06       30 阅读
  4. raft实现心得-核心设计

    2024-01-31 12:00:06       30 阅读
  5. mapper xml中 <和>的写法

    2024-01-31 12:00:06       35 阅读
  6. 瑞芯微1808模型转换(onnx到rknn)环境配置过程

    2024-01-31 12:00:06       38 阅读
  7. ES客户端接入方式

    2024-01-31 12:00:06       31 阅读
  8. 2024.1.22 parse_rule.用户画像es数据使用rule规则读取

    2024-01-31 12:00:06       28 阅读
  9. wrappedComponentRef和ref的区别

    2024-01-31 12:00:06       31 阅读
  10. 通过MediaStore查询image,video,arm,pdf等等文件数据

    2024-01-31 12:00:06       30 阅读