本题的大意就是在一棵树上选一些节点,被选中的节点可以覆盖他相 邻的点,问最少需要放几个节点\text{本题的大意就是在一棵树上选一些节点,被选中的节点可以覆盖他相 邻的点,问最少需要放几个节}\\\text{点}\\
经典的树形DP可以发现对于以i为节点的子树在同一时刻只存在三种状况我们用f[i]来表示该店选时的最少选择的点数数用g[i]表示该点不选儿子选时的最少选择的点数同h[i]表示该点不选而且儿子也不选的最少选择的点数容易得到下面的方程\text{经典的树形DP可以发现对于以}i\text{为节点的子树在同一时刻只存在三种状况}\\\text{我们用}f[i]\text{来表示该店选时的最少选择的点数数}\\\text{用}g[i]\text{表示该点不选儿子选时的最少选择的点数}\\\text{同}h[i]\text{表示该点不选而且儿子也不选的最少选择的点数}\\\text{容易得到下面的方程}
f[i]=∑min(f[j],g[j],h[j])j∈son[i]表示该点选了之后,儿子的状态可以任意选择f[i]=\sum{min(f[j],g[j],h[j])} \quad j\in son[i] \text{表示该点选了之后,儿子的状态可以任意选择}
g[i]=∑min(f[j],g[j])+min(f[j]−min(f[j],g[j]))j∈son[i]表示在儿子李先任意选择合法状态,再选择一个节点看守他g[i]=\sum{min(f[j],g[j])} + min(f[j]-min(f[j],g[j]))\qquad j\in son[i]\\\text{表示在儿子李先任意选择合法状态,再选择一个节点看守他}
h[i]=∑g[j]h[i]=\sum{g[j]}没什么了,只能是这样了
下面是代码

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#define inf 0x3f3f3f
#define min(a,b) ((a)<(b)?(a):(b))
#define N 10000+5
#define M 20000+5
using namespace std;
int head[N],f[N],g[N],h[N],n;
struct graph
{   int next,to;graph () {}graph (int _next,int _to):next(_next),to(_to){}
}edge[M];
inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0' || ch>'9'){if(ch=='-1')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;
}
inline void add(int x,int y)
{static int cnt = 0;edge[++cnt]=graph(head[x],y);head[x]=cnt;edge[++cnt]=graph(head[y],x);head[y]=cnt;
}
void DFS(int x,int fa)
{f[x]=1;g[x]=0;int MIN=inf;for(int i=head[x];i;i=edge[i].next)if(edge[i].to ^ fa){DFS(edge[i].to,x);f[x]+=min(f[edge[i].to],min(g[edge[i].to],h[edge[i].to]));g[x]+=min(f[edge[i].to],g[edge[i].to]);MIN=min(MIN,f[edge[i].to]-min(f[edge[i].to],g[edge[i].to]));h[x]+=g[edge[i].to];}g[x]+=MIN;
}
int main()
{cin>>n;for(int i=1;i<n;++i){int tmp1=read(),tmp2=read();add(tmp1,tmp2);}DFS(1,-1);cout<<min(f[1],g[1]);
}

USACO 2008 Jan Gold 3.Cell Phone Network 树形dp相关推荐

  1. BZOJ 4509 USACO 2016 Jan Gold Angry Cows

    Bessie设计了一个游戏,将奶牛投掷到一个有多个草堆数轴上,奶牛的能量为R表示奶牛可以引爆半径R内的所有草堆,接着被引爆的这些草堆的能量为R-1,第二次被引爆的为R-2,以此类推,最后为0.问最小的 ...

  2. BZOJ 1589 Trick or Treat on the Farm (tarjan缩点,记忆化搜索)[Usaco 2008 Dec Gold]【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://hydro.ac/d/bzoj/p/1589 Problem 每年万圣 ...

  3. 【USACO 2009 JAN GOLD】安全路径

    题目 问题描述 Gremlins最近在农场上泛滥,它们经常会阻止牛们从农庄(牛棚_1)走到别的牛棚(牛_i的目的地是牛棚_i).每一个gremlin只认识牛_i并且知道牛_i一般走到牛棚_i的最短路经 ...

  4. USACO 2008 OCT gold 牧草

    题目描述 有N (2 <= N <= 1,000)头奶牛,分别编号为1到N.还有N颗牧草分别编号为1到N.简单起见,第i头奶牛都盯着第i颗牧草.有几对牧草分别用一些小路连接了起来,总共有N ...

  5. Cell Phone Network

    Cell Phone Network 题意: 每个牧场的电塔可以覆盖与该牧场相邻的电塔,为了让所有牛都可以打电话,求建的电塔的最小数量 题解: 树的最小支配集 dp[x][0]:选点i,并且以点i为根 ...

  6. BSOJ4217 【USACO 2013 Feburary Gold】旅行线路 DP(双路递推)

    4217 -- [USACO 2013 Feburary Gold]旅行线路 Description 贝西经营着一家旅行社,一天贝西带着几队游客沿着亚马逊河旅行,河的两边分布着一些景点,每个景点都对应 ...

  7. [USACO 2007 Jan S]Protecting the Flowers

    题目: [USACO 2007 Jan S]Protecting the Flowers ,哈哈,我们今天来看一道简单的贪心算法题嘛,这是选自USACO上的一道题,好了,我们一起来看看题意吧: 题目描 ...

  8. usaco 2008 oct pwalk

    BFS即可,不知道怎么回事,我竟然写了个SPFA--虽然也是正确的. 还需要注意细节,数组开始又小了... /** usaco 2008 oct pwalk.c* mike-w* 2012-10-28 ...

  9. usaco 2008 oct water

    这是一道MST,不过我最开始没看出来==!考虑最优解只能是一个森林,森林中的每棵树只有一个井,于是我们可以创建一个虚拟节点,将它和井连接起来,权值赋予挖井的费用,这样解就是MST /** usaco ...

最新文章

  1. Nat. Mach. Intell. | 生物医学关系抽取的机器学习新框架
  2. 网络推广运营期间如何提升用户增长水平促进企业稳步推进网络推广
  3. excel数据库_中琅条码打印软件数据库连接详解
  4. 【每周CV论文推荐】 人脸识别剩下的难题:从遮挡,年龄,姿态,妆造到亲属关系,人脸攻击...
  5. 类模板 - C++快速入门45
  6. 常见笔顺错误的字_[转载]常见笔画笔顺易错字大全
  7. 2021年低压电工新版试题及低压电工考试总结
  8. ArcFace: AdditiveAngularMarginLossforDeepFaceRecognition
  9. 计算机用户密码怎么查看,电脑密码如何查看? 电脑教程:查看方法
  10. 【正点原子MP157连载】第二章 Ubuntu系统入门-摘自【正点原子】【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
  11. 打2把王者荣耀的时间,学会JAVA自制验证码图片
  12. 计算机应用word单元测试2,计算机应用基础测试题2
  13. 桌面画图工具:Pointofix(fertig)
  14. 【Java】interrupt、interrupted和isInterrupted的区别
  15. 详解计算机内存及基于内存理解的几种数据结构
  16. (附源码)计算机毕业设计ssm服装销售商城系统
  17. 【菜谱】口感好的快手菜
  18. Google大数据三大论文-MapReduce--中文翻译
  19. python什么意思d_python里d是什么意思
  20. 2022-2028全球与中国360度投影系统市场现状及未来发展趋势

热门文章

  1. ResNet、ResNeXt网络详解及复现
  2. 概率论:魏布斯分布Weibull cumulative distribution function
  3. 【第25章】移动应用安全需求分析与安全保护工程(软考:信息安全工程师) -- 学习笔记
  4. 三年来我听过的耳机——顺便侃侃我的观念
  5. 小白成长记第2期:简单易操的YouTube美金项目,get!
  6. 俄勒冈大学计算机科学专业,俄勒冈大学计算机
  7. 网络安全应该了解的基础大全(收集)
  8. ffmpeg API FR NET
  9. 长安链源码学习v2.2.1--ioc机制(十)
  10. MyBatis源码简单分析