【题解】UVA1218 Perfect Service
UVA1218:https://www.luogu.org/problemnew/show/UVA1218
刷紫书DP题ing
思路
参考lrj紫书 不喜勿喷
- d(u,0):u是服务器,孩子是不是服务器均可
- d(u,1):u不是服务器,u的父亲是服务器,u的孩子不能是服务器
- d(u,2):u不是服务器且u的父亲不是服务器,u的孩子必须有且仅有一个是服务器。
前两个状态方程好写
那么d(u,2)呢?
d(u,2)就会等于 他儿子全都不是 减去某个不是 再加上某个是 这是这道树形DP的难点
因此 状态方程:d(u,2) = Min(d(u,1)-d(v,2)+d(v,0)) |v是u的孩子
详细解释见代码~
代码
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
#define maxn 10010
vector<int> sons[maxn];
int dp[maxn][3];
int n;
void search(int u,int father)
{
dp[u][0]=1;//本身算一个
dp[u][1]=0;
dp[u][2]=maxn;//要查找 先定义成最大
for(int i=0;i<sons[u].size();i++)
{
if(sons[u][i]!=father)//如果不是父亲 就是儿子
{
search(sons[u][i],u);//递归查找
dp[u][0]+=min(dp[sons[u][i]][0],dp[sons[u][i]][1]);//如果他是 儿子可以是或者不是
dp[u][1]+=dp[sons[u][i]][2];//如果他不是 但他父亲是 儿子都不是
}
}
for(int i=0;i<sons[u].size();i++)
{
if(sons[u][i]!=father)
dp[u][2]=min(dp[u][1]-dp[sons[u][i]][2]+dp[sons[u][i]][0],dp[u][2]);
//如果他不是 他父亲也不是 那么就是他儿子全都不是减去某个不是再加上某个是
}
}
int main()
{
while(scanf("%d",&n)==1)
{
int x,y;
for(int i=1;i<n;i++)
{
scanf("%d%d",&x,&y);//存边
sons[x].push_back(y);
sons[y].push_back(x);
}
search(1,-1);
printf("%d\n",min(dp[1][0],dp[1][2]));//答案在第一个是服务器
//或者第一个不是但是儿子之一是
scanf("%d",&x);//数据结束
if(x==-1)
break;
for(int i=1;i<=n;i++)//初始化
sons[i].clear();
memset(dp,0,sizeof(dp));
}
}
【题解】UVA1218 Perfect Service的更多相关文章
- UVA1218 Perfect Service
Time Limit: 3000MS 64bit IO Format: %lld & %llu /*by SilverN*/ #include<iostream> #inc ...
- POJ 3398 Perfect Service(树型动态规划,最小支配集)
POJ 3398 Perfect Service(树型动态规划,最小支配集) Description A network is composed of N computers connected by ...
- Perfect Service [POJ 3398]
Perfect Service 描述 网络由N个通过N-1个通信链路连接的计算机组成,使得任何两台计算机可以通过独特的路由进行通信.如果两台计算机之间存在通信链路,则称这两台计算机是相邻的.计算机的邻 ...
- UVA - 1218 Perfect Service(树形dp)
题目链接:id=36043">UVA - 1218 Perfect Service 题意 有n台电脑.互相以无根树的方式连接,现要将当中一部分电脑作为server,且要求每台电脑必须连 ...
- UVa 1218 - Perfect Service
/*---UVa 1218 - Perfect Service ---首先对状态进行划分: ---dp[u][0]:u是服务器,则u的子节点可以是也可以不是服务器 ---dp[u][1]:u不是服务器 ...
- Perfect service(树形dp)
Perfect service(树形dp) 有n台机器形成树状结构,要求在其中一些机器上安装服务器,使得每台不是服务器的计算机恰好和一台服务器计算机相邻.求服务器的最小数量.n<=10000. ...
- POJ 3398 Perfect Service --最小支配集
题目链接:http://poj.org/problem?id=3398 这题可以用两种上述讲的两种算法解:http://www.cnblogs.com/whatbeg/p/3776612.html 第 ...
- 【POJ】3398 Perfect Service
1. 题目描述某树形网络由$n, n \in [1, 10^4]$台计算机组成.现从中选择一些计算机作为服务器,使得每当普通计算机恰好与一台服务器连接(并且不超过一台).求需要指定服务器的最少数量 2 ...
- Perfect Service
题意: n个节点树,在一个节点放上一台服务器可以给相邻的其他各点提供服务且一个节点只能接受一台服务器,求使n个节点都被服务放的服务器的最小数量. 分析: 不算太难,状态想的差不多,但是考虑不全面状态方 ...
随机推荐
- ActivityGroup和TabActiviy的差异性?
TabActivity功能比较专一,就是做主界面Activity切换用的,所以定制性方面也就限制了许多,而且修改麻烦,不便于维护.ActivityGroup也是用来管理多个Activity的,但是功能 ...
- [linux]解决DNS配置重启丢失
DNS配置重启丢失 每次重启后都修改DNS配置文件 /etc/resolv.conf从网上得知 /etc/resolv.conf中的DNS配置是从/etc/resolvconf/resolv.conf ...
- 0.数据结构(python语言) 基本概念 算法的代价及度量!!!
先看思维导图: *思维导图有点简陋,本着循循渐进的思想,这小节的知识大多只做了解即可. *重点在于算法的代价及度量!!!查找资料务必弄清楚. 零.四个基本概念 问题:一个具体的需求 问题实例:针对问题 ...
- windows环境下MySQL-5.7.12-winx64下载安装与配置
系统:64位Win-7 官网压缩包:mysql-5.7.12-winx64.zip 前后花了一些时间,以前都是下载软件直接安装在本地,现在这个不一样,下载压缩包后要解压缩到安装目录,然后在控制台下配置 ...
- 统一latext在vsc的markdown+math和有道云笔记里的出发方式
起因 前段时间在有道云笔记上写笔记,里面使用latex来记录数学符号,有道云的latex行内触发模式为 `$ latex $`, 之后我在visual studio code里面使用markdown+ ...
- 转载:.NET Memory Leak: XmlSerializing your way to a Memory Leak
原文地址:http://blogs.msdn.com/b/tess/archive/2006/02/15/532804.aspx I hate to give away the resolution ...
- Colorbox - a jQuery lightbox
http://www.jacklmoore.com/colorbox/http://www.jacklmoore.com/colorbox/example5/ <script type=&quo ...
- javascript实现数据结构:线索二叉树
遍历二叉树是按一定的规则将树中的结点排列成一个线性序列,即是对非线性结构的线性化操作.如何找到遍历过程中动态得到的每个结点的直接前驱和直接后继(第一个和最后一个除外)?如何保存这些信息? 设一棵二叉树 ...
- 通用的popupwindow底部弹出框
前段时间做项目的时候,有几个底部弹出框,当时因为忙着赶进度所有就单独写了好几个popupwindow.后来就想着怎么实现一个通用的PopupWindow工具类 就是在要用到的时候创建该工具类的对象,并 ...
- 三大集合框架之map
Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象. Map没有继承于Collection接口 从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象. Map是 ...