题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054

题目大意:一棵树,要放置哨兵,要求最少放置多少哨兵能监视到所有的结点

题目分析:

放置哨兵无非两种情况,放或不放,我们可以用dp[i][1]来表示第i个结点放置哨兵,dp[i][0]来表示第i个结点不放置哨兵,我们可以从上往下,从左往右来遍历树,所以这就用到了树形DP的知识,我们很容易知道,如果父亲结点没放哨兵,那么子结点肯定要放置哨兵,如果父亲放置了哨兵,那么子结点可以考虑放或者不放。所以很容易写出状态转移方程dp[v][1] += min(dp[u][1],dp[u][0]),dp[v][0] += dp[u][1],由于子结点可能有多个,我们要依次从左到右遍历所以我们必须开一个brother来存放它前一个兄弟结点,然后只要DFS递归的来从上往下遍历就可以得解了

和我的上一篇差不多:https://www.cnblogs.com/wsy107316/p/11319167.html

AC代码:

 /* */
# include <iostream>
# include <stdio.h>
# include <string.h>
# include <cstdlib>
# include <cmath>
# include <climits>
# include <ctime>
# include <algorithm>
# include <deque>
# include <bitset>
# include <cctype>
# include <queue>
# include <stack>
# include <list>
# include <set>
# include <map>
# include <vector>
using namespace std;
const int maxn = ;
bool vis[maxn];
int dp[maxn][];
int n;
vector<int>son[maxn]; void dfs(int root)
{
vis[root]=;
for(int i=; i<son[root].size(); i++ )
{
int v=son[root][i];
if( !vis[v] )
{
dfs(v);
dp[root][] += min(dp[v][], dp[v][]);///0表示无哨兵,i处无哨兵则子结点处必须有哨兵
dp[root][] += dp[v][];///1表示有哨兵,i处有哨兵的情况等于子结点处有哨兵或者无哨兵的最小值
}
}
} int main()
{
int num, so, ss;
while( ~ scanf("%d", &n) )
{
for(int i=; i<=n; i++ )
son[i].clear();
memset(vis, , sizeof(vis)); for(int i=; i<n; i++ )
{
dp[i][] = ;
dp[i][] = ;
} for(int i=; i<n; i++ )
{
scanf("%d:(%d)", &num, &so);
for(int j=; j<so; j++ )
{
scanf("%d", &ss);
son[num].push_back(ss);///num节点可以看到ss节点
son[ss].push_back(num);///则ss节点也可以看到num结点
}
} dfs();///反正整棵树一定是联通的,那么就随便选一个作为根节点
cout<<min(dp[][], dp[][])<<endl;
}
return ;
}

Strategic game(树形DP入门)的更多相关文章

  1. POJ 1463 Strategic game(树形DP入门)

    题意: 给定一棵树, 问最少要占据多少个点才能守护所有边 分析: 树形DP枚举每个点放与不放 树形DP: #include<cstdio> #include<iostream> ...

  2. POJ 2342 树形DP入门题

    有一个大学的庆典晚会,想邀请一些在大学任职的人来參加,每一个人有自己的搞笑值,可是如今遇到一个问题就是假设两个人之间有直接的上下级关系,那么他们中仅仅能有一个来參加,求请来一部分人之后,搞笑值的最大是 ...

  3. 树形dp 入门

    今天学了树形dp,发现树形dp就是入门难一些,于是好心的我便立志要发一篇树形dp入门的博客了. 树形dp的概念什么的,相信大家都已经明白,这里就不再多说.直接上例题. 一.常规树形DP P1352 没 ...

  4. 树形DP入门详解+题目推荐

    树形DP.这是个什么东西?为什么叫这个名字?跟其他DP有什么区别? 相信很多初学者在刚刚接触一种新思想的时候都会有这种问题. 没错,树形DP准确的说是一种DP的思想,将DP建立在树状结构的基础上. 既 ...

  5. [poj2342]Anniversary party树形dp入门

    题意:选出不含直接上下司关系的最大价值. 解题关键:树形dp入门题,注意怎么找出根节点,运用了并查集的思想. 转移方程:dp[i][1]+=dp[j][0];/i是j的子树 dp[i][0]+=max ...

  6. LuoGu-P1122 最大子树和+树形dp入门

    传送门 题意:在一个树上,每个加点都有一个值,求最大的子树和. 思路:据说是树形dp入门. 用dfs,跑一边,回溯的时候求和,若和为负数,则减掉,下次不记录这个节点. #include <ios ...

  7. (树形DP入门题)Anniversary party(没有上司的舞会) HDU - 1520

    题意: 有个公司要举行一场晚会.为了让到会的每个人不受他的直接上司约束而能玩得开心,公司领导决定:如果邀请了某个人,那么一定不会再邀请他的直接的上司,但该人的上司的上司,上司的上司的上司等都可以邀请. ...

  8. 树形DP入门题目推荐以及解析

    关于树形DP几道入门题目 今天恶补树形DP,感觉海星. 其实挺简单的. 介绍几道例题,我会的. 1.洛谷P1352 没有上司的舞会 我的一篇题解 我们可以考虑每一个节点都是有两种情况. 一个是被邀请: ...

  9. 树形DP入门学习

    这里是学习韦神的6道入门树形dp进行入门,本来应放在day12&&13里,但感觉这个应该单独放出来好点. 这里大部分题目都是参考的韦神的思想. A - Anniversary part ...

随机推荐

  1. flutter AnimationBuilder

    class BuilderPage extends StatefulWidget { @override State<StatefulWidget> createState() { // ...

  2. DateTimePicker控件CustomFormat格式字符串及其说明

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wuzhanwen/article/details/78800720格式字符串 描述 d 一个或两位数 ...

  3. SASS系列之:!global VS !deafult

    先脑补两组场景. 场景一: 同事们每天中午都会外出吃饭.通常情况下都会先问,去哪儿吃啊?不知道啊?下楼再说吧.到了楼下好不容易有个人站出来说,既然没人说我可就说了啊,咱们去吃香草香草吧.没人反对就去, ...

  4. 学习笔记之CloudCompare

    CloudCompare - Open Source project https://www.danielgm.net/cc/ 3D point cloud and mesh processing s ...

  5. 服务接口,选择rpc还是http?

    从通信内容/功能上看 http应用于web环境,rpc应用于分布式调度从功能上看没有太大区别,很多情况下rpc与消息中间件结合通信实现分布式调度 从用法上看两者都是c/s结构,无太大区别 从实现上看类 ...

  6. iview 标题内边距过大; 调整iview 单元格内边距、行高;

    1css代码: /*调整table cell间隔和行高*/ .ivu-table-cell { padding-left: 1px; padding-right: 1px; } .ivu-table- ...

  7. redis3集群管理

    以下操作基于redis3.X版本:Redis集群存储原理:Redis 集群使用数据分片(sharding),而非一致性哈希(consistency hashing)来实现,一个 Redis 集群包含 ...

  8. 15.centos7基础学习与积累-001

    1.从头开始积累centos7系统运用 大牛博客:https://blog.51cto.com/yangrong/p5 做到精通这个操作系统, 互联网常用服务器品牌: dell:       4u   ...

  9. 一篇别人写的Kmp算法的讲解,多看多得

    kmp算法的理解与实现 博客分类: algorithms 算法      KMP算法曾被我戏称为看毛片算法,当时笑喷......大三那个时候硬着头皮把算法导论的kmp算法啃完,弄懂了kmp算法 的原理 ...

  10. mysql启动错误:Starting MySQL.. ERROR! The server quit without updating PID file错误

    1.原因是因为 mysql-bin.0000*的文件占满系统盘,磁盘空间不足导致无法写入. 解决方法: 如果不需要二进制日志文件,二进制文件可以实现数据库复制以及即时点恢复. 查看日志在配置文件的da ...