补题链接:Here

算法涉及:树形DP寻找树上最大独立集

一开始想到是利用 树形DP 找树的直径问题,但这里由于可以利用走过的点衍生,所以不符合树的直径问题


查询了一下资料这道题是属于:

树的最大独立集,就是这样的一个集合,这些集合里面的点在树中互不相邻。

树形dp可以解决这个问题,\(dp[u][0]\) 表示不在 \(u\) 的最大独立集, \(dp[u][1]\) 表示在最大独立集里

显然有递推方程

  • \(dp[u][1] += dp[v][1]\)
  • \(dp[u][0] = max(dp[v][0],dp[v][1])\)

不要忘记 \(dp[u][1] = 1\) , 自己也在最大独立集里。

最后输出 \(dp[s][1]\)

const int N = 5e5 + 10;
vector<int>e[N];
int dp[N][2];
void dfs(int u, int fa) {
dp[u][0] = dp[u][1] = 0;
for (int v : e[u]) {
if (v == fa)continue;
dfs(v, u);
dp[u][1] += dp[v][0];
dp[u][0] += max(dp[v][1], dp[v][0]);
}
dp[u][1]++; // 自己也在最大独立集里
}
void solve() {
int n, s;
cin >> n >> s;
for (int i = 1; i <= n - 1; ++i) {
int u, v; cin >> u >> v;
e[u].push_back(v);
e[v].push_back(u);
}
dfs(s, -1);
cout << dp[s][1];
}

【每日一题】40. 旅游 (树形DP解决树的最大独立集)的更多相关文章

  1. 【BZOJ-1040】骑士 树形DP + 环套树 + DFS

    1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3312  Solved: 1269[Submit][Status ...

  2. HDU 4514 - 湫湫系列故事——设计风景线 - [并查集判无向图环][树形DP求树的直径]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4514 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...

  3. 浅谈关于树形dp求树的直径问题

    在一个有n个节点,n-1条无向边的无向图中,求图中最远两个节点的距离,那么将这个图看做一棵无根树,要求的即是树的直径. 求树的直径主要有两种方法:树形dp和两次bfs/dfs,因为我太菜了不会写后者这 ...

  4. 树形DP 学习笔记(树形DP、树的直径、树的重心)

    前言:寒假讲过树形DP,这次再复习一下. -------------- 基本的树形DP 实现形式 树形DP的主要实现形式是$dfs$.这是因为树的特殊结构决定的——只有确定了儿子,才能决定父亲.划分阶 ...

  5. 算法进阶面试题05——树形dp解决步骤、返回最大搜索二叉子树的大小、二叉树最远两节点的距离、晚会最大活跃度、手撕缓存结构LRU

    接着第四课的内容,加入部分第五课的内容,主要介绍树形dp和LRU 第一题: 给定一棵二叉树的头节点head,请返回最大搜索二叉子树的大小 二叉树的套路 统一处理逻辑:假设以每个节点为头的这棵树,他的最 ...

  6. HDU 4705 Y (2013多校10,1010题,简单树形DP)

    Y Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submiss ...

  7. POJ 3162 Walking Race 树形DP+线段树

    给出一棵树,编号为1~n,给出数m 漂亮mm连续n天锻炼身体,每天会以节点i为起点,走到离i最远距离的节点 走了n天之后,mm想到知道自己这n天的锻炼效果 于是mm把这n天每一天走的距离记录在一起,成 ...

  8. SPOJ 1435 - Vertex Cover(树形DP,树的最小点覆盖)

    算是个经典题目了,很模板的树形DP题目 做这个题的时候一开始就想到树形DP了,可是由于各种原因没写出来,代码太糟烂了,赛后还是改了好久才过的 dp(u,0)=sum(dp(v,1)): dp(u,1) ...

  9. 洛谷P4338 [ZJOI2018]历史(LCT,树形DP,树链剖分)

    洛谷题目传送门 ZJOI的考场上最弱外省选手T2 10分成功滚粗...... 首先要想到30分的结论 说实话Day1前几天刚刚刚掉了SDOI2017的树点涂色,考场上也想到了这一点 想到了又有什么用? ...

  10. 算法笔记--树的直径 && 树形dp && 虚树 && 树分治 && 树上差分 && 树链剖分

    树的直径: 利用了树的直径的一个性质:距某个点最远的叶子节点一定是树的某一条直径的端点. 先从任意一顶点a出发,bfs找到离它最远的一个叶子顶点b,然后再从b出发bfs找到离b最远的顶点c,那么b和c ...

随机推荐

  1. 后台获取的map集合封装json

    let list = [] let arr = {'a':'1','b':'2','c':'3','d':'4'} for(var key in arr){ console.log("key ...

  2. Qt官网开源最新版下载安装保姆级教程

    什么是Qt(了解请跳过) Qt 基本介绍 Qt 是一个跨平台C++图形用户界面应用程序开发框架. 有关 Qt 的详细介绍,可以参考这篇文章: Qt是什么?Qt简介(非常全面) - 李清龙的文章 - 知 ...

  3. CentOS(7.6)环境下迁移Mysql(5.7)的data目录到指定位置

    第一步:关闭Mysql #关闭Mysql服务systemctl stop mysqld#查看Mysql服务状态 ps -ef|grep mysql 第二步:创建新目录,并拷贝数据文件 #创建data文 ...

  4. [ABC318G] Typical Path Problem

    Problem Statement You are given a simple connected undirected graph $G$ with $N$ vertices and $M$ ed ...

  5. Head First Java学习:第十章-数字很重要

     1.Math 方法:最接近全局的方法 一种方法的行为不依靠实例变量值,方法对参数执行操作,但是操作不受实例变量状态影响,那么为了执行该方法去堆上建立对象实例比较浪费. 举例: Math mathOb ...

  6. 【Python微信机器人】第六篇:优化使用方式,可pip安装

    优化内容 这篇不聊技术点,说一下优化后的Python机器人代码怎么使用,优化内容如下: 将hook库独立成一个库,发布到pypi,可使用pip安装 将微信相关的代码发布成另一个库,也可以pip安装 g ...

  7. 如何使用libgdx做游戏01---libgdx的安装

    一般来说使用这个工具做游戏的都是java开发者,这种技术在国外勉强算是必学的,而在国内却很少有这方面的知识. 接下来,我将讲解如何安装libgdx,也算是简单的libgdx入门 工具:idea.jdk ...

  8. Ef Core花里胡哨系列(10) 动态起来的 DbContext

    Ef Core花里胡哨系列(10) 动态起来的 DbContext 我们知道,DbContext有两种托管方式,一种是AddDbContext和AddDbContextFactory,但是呢他们各有优 ...

  9. 构建健康游戏环境:DFA算法在敏感词过滤的应用

    现在的游戏有敏感词检测这一点,相信大家也不陌生了,不管是聊天,起名,签名还是简介,只要是能让玩家手动输入的地方,一定少不了敏感词识别,至于识别之后是拒绝修改还是星号替换,这个就各有各的做法了,但是绕不 ...

  10. Github 星标 8K+ 这款国人开源的 Redis 可视化管理工具,真香...

    做程序员就少不了与一些工具打交道,比如:监控工具.管理工具等,有些工具是命令行界面,有些工具是可视化界面,反正都是可以能够满足日常使用的功能需求. 对于redis管理工具来说,也有不少可能的产品,比如 ...