Perfect Service】的更多相关文章

POJ 3398 Perfect Service(树型动态规划,最小支配集) Description A network is composed of N computers connected by N − 1 communication links such that any two computers can be communicated via a unique route. Two computers are said to be adjacent if there is a com…
Perfect Service 描述 网络由N个通过N-1个通信链路连接的计算机组成,使得任何两台计算机可以通过独特的路由进行通信.如果两台计算机之间存在通信链路,则称这两台计算机是相邻的.计算机的邻居是与它相邻的一组计算机.为了快速访问和检索大量信息,我们需要选择一些作为服务器的计算机向其邻居提供资源.请注意,服务器可以为其所有邻居提供服务.如果每个客户端(非服务器)由一个服务器提供服务,则网络中的一组服务器形成完美的服务.问题是找到最少数量的服务器,形成一个完美的服务,我们称这个号码完美的服…
题目链接:id=36043">UVA - 1218 Perfect Service 题意 有n台电脑.互相以无根树的方式连接,现要将当中一部分电脑作为server,且要求每台电脑必须连接且仅仅能连接一台server(不包含作为server的电脑).求最少须要多少台电脑作为server. 思路 典型的树形dp问题,那么我们来建立模型. d(u,0):u是server,孩子是不是server均可 d(u,1):u不是server,u的父亲是server,u的孩子不能是server d(u,2)…
/*---UVa 1218 - Perfect Service ---首先对状态进行划分: ---dp[u][0]:u是服务器,则u的子节点可以是也可以不是服务器 ---dp[u][1]:u不是服务器,但u的父节点是服务器,则u的所有儿子节点都不是服务器 ---dp[u][2]:u和u的父亲都不是服务器,则u的儿子恰好有一个是服务器 ---状态转移方程: ---dp[u][0]=sum{min(dp[v][0],dp[v][1])}+1 ---dp[u][1]=sum(dp[v][2]); --…
Perfect service(树形dp) 有n台机器形成树状结构,要求在其中一些机器上安装服务器,使得每台不是服务器的计算机恰好和一台服务器计算机相邻.求服务器的最小数量.n<=10000. 这种类似独立集的树形dp问题,都可以将同一个结点的状态分成几类.这里用\(f[i][0]\)表示i是服务器,\(f[i][1]\)表示i不是服务器,但是i的父亲是服务器.\(f[i][2]\)表示i和i的父亲都不是服务器. 那么就可以写出转移方程:\(f[i][0]=sum(min(f[v][0], f[…
题目链接:http://poj.org/problem?id=3398 这题可以用两种上述讲的两种算法解:http://www.cnblogs.com/whatbeg/p/3776612.html 第一种,贪心算法: 贪心算法直接套一个最小支配集模板就可以了,我不能证明这样是正确的,但是能AC 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #incl…
1. 题目描述某树形网络由$n, n \in [1, 10^4]$台计算机组成.现从中选择一些计算机作为服务器,使得每当普通计算机恰好与一台服务器连接(并且不超过一台).求需要指定服务器的最少数量 2. 基本思路这显然是一个求最优解的问题,并且该网络拓扑结构为树形.因此,考虑树形DP.关键是考虑有哪些状态?不妨令(1) $dp[u][0]$表示$u$作为服务器,那么它的儿子结点可以是服务器或者普通机:(2) $dp[u][1]$表示$u$是普通计算机,但是$fa[u]$作为服务器,那么它的儿子结…
题意: n个节点树,在一个节点放上一台服务器可以给相邻的其他各点提供服务且一个节点只能接受一台服务器,求使n个节点都被服务放的服务器的最小数量. 分析: 不算太难,状态想的差不多,但是考虑不全面状态方程写错了,要多练啊!!!状态好想,一个节点服务器放法有3中,放在自身,放在父节点,放在孩子节点 #include <map> #include <set> #include <list> #include <cmath> #include <queue&g…
思路:dp[i][0]表示i是服务器:dp[i][1]表示i不是服务器,但它的父节点是服务器:dp[i][2]表示i和他的父亲都不是服务器.       转移方程: d[u][0] += min(d[v][0], d[v][1]); d[u][1] += d[v][2]; for(int i = 0; i < n; ++i) {       int v= son[u][i];       if(v == pre) continue;       d[u][2] = min(d[u][2], d[…
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3659 题意: 有n(n≤10000)台机器形成树状结构.要求在其中一些机器上安装服务器,使得每台不是服务器的计算机恰好和一台服务器计算机相邻.求服务器的最少数量. 分析: 按照每个结点的情况进行分类:一.d(u,0):u是服务器,则每个子结点可以是服务器也可以不是.二.d(u,1)…