要记录三种状态:

1、被子节点覆盖

2、等待父节点覆盖

3、建立覆盖节点

然后转移就好了,有一点麻烦的就是被子节点覆盖,需要保证至少有一个子节点建立

注:检查变量名与实际含义。

码:

#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int f[1505][4],k[1505],o,m,n,i,j,x,fu[1505];
vector<int>v[1505];
void dfs(int o)
{int i,nd,min1=999999999,min2=0;f[o][1]=k[o];for(i=0;i<v[o].size();i++){nd=v[o][i];dfs(nd);f[o][1]+=min(f[nd][0],min(f[nd][1],f[nd][2]));//建在这里 if(f[nd][1]-f[nd][2]<min1)min1=f[nd][1]-f[nd][2],min2=nd;     //影响到这里f[o][0]+=min(f[nd][2],f[nd][1]);//      }   if(v[o].size()==0){f[o][2]=999999999;
return ;
}f[o][2]+=f[min2][1];for(i=0;i<v[o].size();i++){nd=v[o][i];if(nd==min2)continue;f[o][2]+=min(f[nd][1],f[nd][2]);       }
}
int main()
{scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d%d%d",&o,&x,&m);k[o]=x;for(j=1;j<=m;j++){scanf("%d",&x);v[o].push_back(x);fu[x]=o;     }       }for(i=1;i<=n;i++)if(fu[i]==0){o=i;break;}
dfs(o);
printf("%d",min(f[o][1],f[o][2]));
}

[SDOI2006]保安站岗 树dp相关推荐

  1. [SDOI2006] 保安站岗

    题目链接 第一遍不知道为什么就爆零了-- 第二遍改了一下策略,思路没变,结果不知道为什么就 A 了??? 树形 DP 经典问题:选择最少点以覆盖树上所有点(边). 对于本题,设 dp[i][0/1][ ...

  2. [BZOJ2125]最短路(圆方树DP)

    题意:仙人掌图最短路. 算法:圆方树DP,$O(n\log n+Q\log n)$ 首先建出仙人掌圆方树(与点双圆方树的区别在于直接连割边,也就是存在圆圆边),然后考虑点u-v的最短路径,显然就是:在 ...

  3. 【BZOJ1040】【codevs1423】骑士,第一次的基环外向树DP

    传送门1 传送门2 思路: 好题 比较简单的DP思路 之前没写过基环树DP,第一次搞真心orz 我们发现这些元素是具有从属关系的 也就是说如果对"厌恶的骑士"两两相互连边,那么问题 ...

  4. 51nod1812树的双直径(换根树DP)

    传送门:http://www.51nod.com/Challenge/Problem.html#!#problemId=1812 题解:头一次写换根树DP. 求两条不相交的直径乘积最大,所以可以这样考 ...

  5. 基环树DP(bzoj 1040: [ZJOI2008]骑士)

    树:n个点n-1条边的连通图 基环树:n个点n条边的连通图,也就是一个环套着多棵树 基环树DP:找到环上任意相邻两点,断掉这两点之间的边,就形成了一棵树 之后对这两点分别进行一次树形DP即可 例题: ...

  6. P1295 [TJOI2011]书架(线段树dp)

    P1295 [TJOI2011]书架(线段树dp) 我好菜 先考虑普通dp: d p i = m i n ( d p j + m a x ( h j + 1 , h j + 2 - , h i ) ) ...

  7. 【BZOJ1124】Mafia(POI2008)-环套树DP

    测试地址:Mafia 做法: 本题需要用到环套树DP. 按照题目构图,很显然是我们很熟悉的环套树森林.接下来我们进行分析,最后活下来一些什么人是合法的呢?观察发现,一个人的目标如果是自己那就必死,而没 ...

  8. 洛谷P2495 [SDOI2011]消耗战(虚树dp)

    P2495 [SDOI2011]消耗战 题目链接 题解: 虚树\(dp\)入门题吧.虚树的核心思想其实就是每次只保留关键点,因为关键点的dfs序的相对大小顺序和原来的树中结点dfs序的相对大小顺序都是 ...

  9. 【暖*墟】#动态规划# 基环树DP的学习与练习

    因为弃置了 四边形不等式优化 ,所以DP的任务还剩下 基环树DP / 插头DP / 动态DP 当然,树形DP / 状压DP / 数位DP / 斜率优化DP 也还是要练习的...... 一 . 基环树的 ...

最新文章

  1. Angular多个页面引入同一个组件报错The Component ‘MyComponentComponent‘ is declared by more than one NgModule怎么办?
  2. Python-CSS整理
  3. php操作mysql数据库,PHP操作mysql数据库
  4. MySQL 和 PostgreSQL 对比
  5. 序列化类型为XX的对象时检测到循环引用
  6. Go语言生成区间随机数
  7. 微信支付 商户Key 支付Key API密钥 的获取
  8. 如何修改mysql物理文件存放地址_如何防封号物理地址和网络地址修改攻略
  9. python文本分类算法_python编写朴素贝叶斯用于文本分类
  10. 5G 消息绝地求生:盘活短信 VS 击垮微信?
  11. 华三s5000配置镜像接口_H3C系列交换机端口镜像的配置
  12. 计算机网络专业怎么厉害,面试自我介绍:计算机网络专业
  13. 括号匹配(POJ2955)题解
  14. Reading Ingestion —— Paxos Made Simple
  15. 手机android系统锁了怎么解决方法,安卓手机被恶意软件锁机了怎么办?试下这五种方法...
  16. win10禁用计算机维护,想要电脑不卡,你必须知道win10必须禁用的服务有哪些
  17. 电力系统机组组合优化调度(IEEE14节点、IEEE30节点、IEEE118节点)(Matlab代码实现)
  18. 3P21J30 2023年最新版车载版下载
  19. 高颜值可视化设计UNIAPP源码生成器
  20. 使用 docker 进行iost 测试链节点搭建

热门文章

  1. filedialog 函数用法
  2. nndl学习笔记(二)反向传播公式推导与详解
  3. 查看在Ubuntu上打印的大型JSON文件
  4. 优达学城深度学习之六——TensorFlow卷积神经网络
  5. Python官方文档学习心得(第二篇)
  6. python安装第三方库时报错 SyntaxError: invalid syntax
  7. linux top cpu瓶颈,Linux命令----分析CPU的瓶颈
  8. net start mysql服务没有响应控制功能_新服务安装
  9. matlab单元数组和结构,Matlab中单元数组和结构数组
  10. 石头剪子布蜥蜴史波克python_C++字符串——石头剪刀布