洛谷 P2996:[USACO10NOV] Visiting Cows G ← 邻接表 + 树形 DP + 树上最大权独立集

【题目来源】
https://www.luogu.com.cn/problem/P2996

【题目描述】
经过了几周的辛苦工作,Bessie 终于迎来了一个假期。
作为奶牛群中最会社交的牛,她希望去拜访 N(1≤N≤50000) 个朋友。这些朋友被标号为 1,2,...,N。这些奶牛有一个不同寻常的交通系统,里面有 N−1 条路,每条路连接了一对编号为 C1 和 C2 的奶牛 (1≤C1≤N,1≤C2≤N,C1≠C2 )。这样,在每一对奶牛之间都有一条唯一的通路。
FJ 希望 Bessie 尽快的回到农场。于是,他就指示 Bessie:如果对于一条路直接相连的两个奶牛,Bessie 只能拜访其中的一个。当然,Bessie 希望她的假期越长越好,所以她想知道她可以拜访的奶牛的最大数目。

【输入格式】
第一行,1 个整数 N。
接下来 N−1 行,每行 2 个整数 C1,C2,表示有一条通路连接了编号为 C1 和 C2 的奶牛。

【输出格式】
第一行,1 个整数,代表 Bessie 最多能拜访有多少头奶牛。

【输入样例】
7
6 2
3 4
2 3
1 2
7 6
5 6

【输出样例】
4

【数据范围】
1≤N≤50000
1≤C1≤N,1≤C2≤N,C1≠C2

【算法分析】
● 本题与"洛谷 P1352:没有上司的舞会:https://blog.csdn.net/hnjzsyjyj/article/details/168026658"同模板,且略简单。

● 此题是树形动态规划的经典习题,也是树上最大权独立集简单题。
(1)状态定义
fu0:不选 u 时,以 u 为根的子树最大权。
fu1:选 u 时,以 u 为根的子树最大权。
(2)转移方程(u:当前子树的根节点,v:u 的所有直接子节点,valu:节点 u 的权值)
fu0 = Σ max(fv0, fv1)
fu1 = valu + Σ fv0

【算法代码】

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

const int N=5e4+5;
vector<int> g[N];
long long f[N][2];
int n;

void dfs(int u,int fa) {
    f[u][0]=0;
    f[u][1]=1;
    for(int v:g[u]) {
        if(v==fa) continue;
        dfs(v,u);
        f[u][0]+=max(f[v][0],f[v][1]);
        f[u][1]+=f[v][0];
    }
}

int main() {
    cin>>n;
    for(int i=1; i<n; i++) {
        int u,v;
        cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    dfs(1,0);
    cout<<max(f[1][0],f[1][1])<<endl;
    return 0;
}

/*
in:
7
6 2
3 4
2 3
1 2
7 6
5 6

out:
4
*/

【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/168026658

相关推荐
汉克老师3 个月前
GESP2026年6月认证C++六级( 第三部分编程题(2、满二叉树))精讲
c++·深度优先·树形dp·满二叉树·gesp六级·树形dfs
王老师青少年编程6 个月前
动态规划之【树形DP】第4课:树形DP应用案例实践3
c++·动态规划·dp·树形dp·csp·信奥赛·提高组
王老师青少年编程9 个月前
信奥赛C++提高组csp-s之树形DP详解及编程实例
c++·动态规划·树形dp·csp·信奥赛·csp-s·提高组
hnjzsyjyj1 年前
洛谷 P1922:女仆咖啡厅桌游吧 ← 树形DP
动态规划·树形dp
hnjzsyjyj1 年前
AcWing 323:战略游戏 ← 树形DP
动态规划·树形dp
明月清了个风1 年前
数据结构与算法学习笔记(Acwing 提高课)----动态规划·树形DP
笔记·学习·动态规划·树形dp
陈琦煜2 年前
AcWing 1073 树的中心 树形dp (详解)
动态规划·树形dp
cocoack3 年前
备战蓝桥杯---树形DP基础2
c++·算法·蓝桥杯·深度优先·树形dp
卡布叻_周深3 年前
2024初三年后集训模拟测试3
dp·树形dp·二分答案·单调队列优化dp