Cell Phone Network G
最小点队的题意: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的更多相关文章
- 树的最小支配集 E - Cell Phone Network POJ - 3659    E. Tree with Small Distances
		E - Cell Phone Network POJ - 3659 题目大意: 给你一棵树,放置灯塔,每一个节点可以覆盖的范围是这个节点的所有子节点和他的父亲节点,问要使得所有的节点被覆盖的最少灯塔数 ... 
- 树形dp  compare E - Cell Phone Network POJ - 3659     B - Strategic game POJ - 1463
		B - Strategic game POJ - 1463 题目大意:给你一棵树,让你放最少的东西来覆盖所有的边 这个题目之前写过,就是一个简单的树形dp的板题,因为这个每一个节点都需要挺好处 ... 
- [USACO08JAN]手机网络Cell Phone Network
		[USACO08JAN]手机网络Cell Phone Network 题目描述 Farmer John has decided to give each of his cows a cell phon ... 
- POJ 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心)-动态规划做法
		POJ 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心) Description Farmer John ... 
- POJ 3659 Cell Phone Network(树的最小支配集)(贪心)
		Cell Phone Network Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6781 Accepted: 242 ... 
- 洛谷P2899 [USACO08JAN]手机网络Cell Phone Network
		P2899 [USACO08JAN]手机网络Cell Phone Network 题目描述 Farmer John has decided to give each of his cows a cel ... 
- 洛谷 P2899 [USACO08JAN]手机网络Cell Phone Network(树形动规)
		题目描述 Farmer John has decided to give each of his cows a cell phone in hopes to encourage their socia ... 
- 洛谷 P2899 [USACO08JAN]手机网络Cell Phone Network
		题目描述 Farmer John has decided to give each of his cows a cell phone in hopes to encourage their socia ... 
- POJ 3659 Cell phone Network (树的最小点覆盖, 树形DP)
		题意: 给定一棵树,每个点可以覆盖自己和相邻的点, 求最少要多少个点覆盖图 #include <cstdio> #include <cstring> #include < ... 
随机推荐
- 很用心的为你写了 9 道 MySQL 面试题
			MySQL 一直是本人很薄弱的部分,后面会多输出 MySQL 的文章贡献给大家,毕竟 MySQL 涉及到数据存储.锁.磁盘寻道.分页等操作系统概念,而且互联网对 MySQL 的注重程度是不言而喻的,后 ... 
- 程序员小张的第一篇博文  --记Markdown的使用学习
			1.前言 为了即将到来的面试做准备,以及记录一下平日里自己的学习过程和生活日常,我开始进驻博客园啦!这就是我的第一篇博客(有点小激动)~ 作为一只新手,首先记录一下今晚的编写博文的学习过程吧~ 2.使 ... 
- Delphi学习手记——单引号和双引号的区别
			单引号和双引号的区别 双引号表示其中字符可能包含变量,而单引号表示整个引号内的东西都当成字符串来处理. 也就是说:没有内设变量就用单引号'',有就用双引号"". 举例说明: $va ... 
- sql 自增序列
			一.使用set identity_insert [database][owner][table]on设置时,要在插入语句中显示列出插入的列; 
- Laravel - 上手实现 - 邮件发送
			Laravel 自带 SwiftMailer 库,集成了多种邮件API,可以很方便的实现邮件的发送. 我们使用到的是SMTP(Simple Message Transfer Protocol)简单邮件 ... 
- samba 客户端工具 smbclient和samba挂载到本地
			smbclient命令属于samba套件,它提供一种命令行使用交互式方式访问samba服务器的共享资源. 安装 yum install -y samba-client 常用参数 -c<命令> ... 
- NER命名实体识别,实体级level的评估,精确率、召回率和F1值
			pre = "0 0 B_SONG I_SONG I_SONG 0 B_SONG I_SONG I_SONG 0 0 B_SINGER I_SINGER I_SINGER 0 O O O B ... 
- Java IO 流 -- 转换流: InputStreamReader OutputStreamWriter
			java 中 转换流是以字符流的形式操作字节流,需要注意一下两点: 1.操作内容必须是纯文本 2.指定字符集避免乱码 操作控制台输入输出: try (BufferedReader br = new B ... 
- synchronized 作为悲观锁,锁住了什么?
			继续来认识 synchronized,上篇文章加不加 synchronized 有什么区别?我们了解了 synchronized 是在多线程并发竞争同一资源的时候使用,这一篇我们来了解,synchro ... 
- linux--配置开发环境 --Apache篇
			现在我的的linux服务器上一般都是使用:Apache 和 Nginx 这两种配置. 你现在安装好了,启动了,也无法通过你服务器绑定的网址访问你的网站. 这是你可以通过这个命令查看一下你的80端口: ... 
