最小点队的题意:https://www.luogu.com.cn/problem/P2899

与战略游戏不同的是,这里要求占领所有的点而不是边。


1自己被自己染色(有信号塔)

这时我们可以想一下,u被自己染色可以由什么转移过来,如果u已经被自己染色了的话,他的儿子v可以选择自己染色,也可以选择被自己(vv)的儿子染色,当然也可以被u染色,当然,我们要选最小的,所以转移方程就是

f [ u ] [ 0 ]  +=  min ( f [ v ] [ 0 ] ,   f  [ v ] [ 1 ] ,  f [ v ] [ 2 ] )

2.被自己的父亲结点染色(自己没有信号塔)

如果被父亲结点(fa)染色了,那么u的儿子v只能选择自己染色或者被它的儿子染色,转移方程为

f [ u ] [ 1 ]  += min  ( f [ v ] [ 0 ] ,  f [ v ] [ 2 ] )

3.被自己的儿子结点染色(自己没有信号塔)

这是最麻烦的一种情况,因为u可能有多个儿子,只要有一个儿子自己染色了,就可以将u覆盖,这种情况就成立了。

那我们就用一个flag记号来考察,在转移的时候,是不是曾经从有信号塔的儿子( dp [ v ] [ 0 ] )转移过来

如果有,那皆大欢喜,什么都不用做。

相反,如果没有,就说明所有状态都是由没有信号塔的儿子( dp [ v ] [ 2 ] ) 转移而来

那我们就应该找一个儿子,把那个儿子换成 dp [ v ] [ 0 ]

找哪个儿子呢?当然是 dp [ v ] [ 0 ] - dp [ v ] [ 2 ] 最小的那个儿子

#include <bits/stdc++.h>
using namespace std;
const int maxn=;
int n;
vector<int>vec[maxn];
int vis[maxn],dp[maxn][];
//dp[now][0]自己覆盖自己,放信号塔
//dp[now][1]父亲覆盖自己,本身不放信号塔
//dp[now][2]儿子覆盖自己,本身不放信号塔
void dfs(int now)
{
int flag=,p=;
dp[now][]=;
for(int i=;i<vec[now].size();i++)
{
int w=vec[now][i];
if(vis[w]) continue;
vis[w]=;
dfs(w);
dp[now][]+=min(dp[w][],min(dp[w][],dp[w][]));//儿子随意
dp[now][]+=min(dp[w][],dp[w][]);
// dp[now][2]+=min(dp[w][0],dp[w][2]);
if(dp[w][]<=dp[w][])
{
flag=;
dp[now][]+=dp[w][];
}
else
{
dp[now][]+=dp[w][];
p=min(p,dp[w][]-dp[w][]);
}
}
if(flag==) dp[now][]+=p;
}
int main()
{
cin>>n;
for(int i=;i<=n-;i++)
{
int l,r;
cin>>l>>r;
vec[l].push_back(r);
vec[r].push_back(l);
}
vis[]=;
dfs();
cout<<min(dp[][],dp[][]);
}

Cell Phone Network G的更多相关文章

  1. 树的最小支配集 E - Cell Phone Network POJ - 3659 E. Tree with Small Distances

    E - Cell Phone Network POJ - 3659 题目大意: 给你一棵树,放置灯塔,每一个节点可以覆盖的范围是这个节点的所有子节点和他的父亲节点,问要使得所有的节点被覆盖的最少灯塔数 ...

  2. 树形dp compare E - Cell Phone Network POJ - 3659 B - Strategic game POJ - 1463

    B - Strategic game POJ - 1463   题目大意:给你一棵树,让你放最少的东西来覆盖所有的边   这个题目之前写过,就是一个简单的树形dp的板题,因为这个每一个节点都需要挺好处 ...

  3. [USACO08JAN]手机网络Cell Phone Network

    [USACO08JAN]手机网络Cell Phone Network 题目描述 Farmer John has decided to give each of his cows a cell phon ...

  4. POJ 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心)-动态规划做法

    POJ 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心) Description Farmer John ...

  5. POJ 3659 Cell Phone Network(树的最小支配集)(贪心)

    Cell Phone Network Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6781   Accepted: 242 ...

  6. 洛谷P2899 [USACO08JAN]手机网络Cell Phone Network

    P2899 [USACO08JAN]手机网络Cell Phone Network 题目描述 Farmer John has decided to give each of his cows a cel ...

  7. 洛谷 P2899 [USACO08JAN]手机网络Cell Phone Network(树形动规)

    题目描述 Farmer John has decided to give each of his cows a cell phone in hopes to encourage their socia ...

  8. 洛谷 P2899 [USACO08JAN]手机网络Cell Phone Network

    题目描述 Farmer John has decided to give each of his cows a cell phone in hopes to encourage their socia ...

  9. POJ 3659 Cell phone Network (树的最小点覆盖, 树形DP)

    题意: 给定一棵树,每个点可以覆盖自己和相邻的点, 求最少要多少个点覆盖图 #include <cstdio> #include <cstring> #include < ...

随机推荐

  1. 数据结构和算法(Golang实现)(8.1)基础知识-前言

    基础知识 学习数据结构和算法.我们要知道一些基础的知识. 一.什么是算法 算法(英文algorithm)这个词在中文里面博大精深,表示算账的方法,也可以表示运筹帷幄的计谋等.在计算机科技里,它表示什么 ...

  2. stand up meeting 11/26/2015

    part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云  完成UI简易界面布局设计:在UI部分实现释义数据格式转换的实现和测试,使得其与外界接口均标准化为string,具体实现见 ...

  3. kafka消息分区机制原理

    背景 kafka如何支撑海量消息的集中写入? 答案就是消息分区. 核心思想是:负载均衡,采用合适的分区策略把消息写到不同的broker上的分区中: 其它的产品中有类似的思想. 比如monogodb, ...

  4. eclipse添加方法注释

    打开注释模板编辑窗口:Window ->Preferences->java -> Code Style -> Code Template->Comments type 设 ...

  5. [YII2] Activeform表单部分组件使用方法

    文本框:textInput(); 密码框:passwordInput(); 单选框:radio(),radioList(); 复选框:checkbox(),checkboxList(); 下拉框:dr ...

  6. [YII2.0] 高级模板简单安装教程

    YIICHINA官网教程就很完善:http://www.yiichina.com/tutorial/692 但是在yii2框架安装运行init.bat报错php.exe不是内部或外部命令, 解决办法: ...

  7. Mybatis Generator通用Join的实现

    通常,我们使用Mybatis实现join表关联的时候,一般都是通过在xml或注解里写自定义sql实现. 本文通过Mybatis Generator的插件功能新增一个JoinPlugin插件,只要在配置 ...

  8. Ipython入门小教程

    学习<利用python进行数据分析>第三章 IPython:一种交互式计算和开发环境的笔记,共享给大家,同时为自己作为备忘用. 安装ipython用pip即可.ps.博主用的是win7系统 ...

  9. Mysql列属性

    列属性又称之为字段属性在mysql中一共有6个属性:null,默认值(default),列描述(comment),主键(primary key),唯一键(unique key)和自动增长 修改数据库字 ...

  10. 数值计算方法实验之按照按三弯矩方程及追赶法的三次样条插值 (MATLAB 代码)

    一.实验目的 在已知f(x),x∈[a,b]的表达式,但函数值不便计算,或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)= yi(i= 0,1…….,n)求出简单 ...