对于每个u要设置三维。

dp[u][0]表示u是服务器,以u为根的最小服务器数,其子节点既可以是,也可以不是,dp[u][0]+=min(d[v][0],d[v][1]);

dp[u][1]表示u不是服务器,但他的父节点时,此时u的子节点都不可能是,dp[u][1]+=dp[v][2];

dp[u][2]表示u及其父亲都不是服务器,u的子节点只有一个是服务器,枚举这个子节点,dp[u][2]=min(d[u][2],d[v1][2]+d[v2][2]+...+d[v][0]),但是我们这样枚举的话,复杂度是O(k2),我们发现求解dp[u][1]时已经求到了dp[v][2]的总和,那么我们可以借用这个优化到O(k):d[u][2]=min(d[u][2],d[u][1]-d[v][2]+d[v][0]).

最后的求解目标就是min(dp[1][0],dp[1][2]). (将1看成树根)

 1 #include<cstdio>
2 #include<cstring>
3 #include<vector>
4 #include<algorithm>
5 using namespace std;
6 const int maxn=10000+5;
7 int n;
8 vector<int> E[maxn];
9 int dp[maxn][3];
10
11 void dfs(int u,int fa){
12 dp[u][0]=1;//自身是服务器
13 dp[u][1]=0;//自身不是,父亲是
14 dp[u][2]=maxn;//自己和父亲都不是
15 int k=E[u].size();
16 if(k==1&&fa!=0) return ;
17 for(int i=0;i<k;i++){
18 int v=E[u][i];
19 if(v==fa) continue;
20 dfs(v,u);
21 dp[u][0]+=min(dp[v][0],dp[v][1]);
22 dp[u][1]+=dp[v][2];
23 }
24 for(int i=0;i<k;i++){
25 int v=E[u][i];
26 if(v==fa) continue;
27 dp[u][2]=min(dp[u][2],dp[u][1]-dp[v][2]+dp[v][0]);
28 }
29 }
30
31 int main(){
32 int u,v;
33 while(~scanf("%d",&n)){
34 for(int i=1;i<=n;i++) E[i].clear();
35 for(int i=1;i<n;i++){
36 scanf("%d%d",&u,&v);
37 E[u].push_back(v);
38 E[v].push_back(u);//正反向边都要建
39 }
40 dfs(1,0);//哪个节点作为树根并不影响
41 printf("%d\n",min(dp[1][0],dp[1][2]));
42 scanf("%d",&u);
43 if(u==-1) break;
44 }
45 return 0;
46 }

POJ3398 Perfect Service (树形DP)的更多相关文章

  1. UVA - 1218 Perfect Service(树形dp)

    题目链接:id=36043">UVA - 1218 Perfect Service 题意 有n台电脑.互相以无根树的方式连接,现要将当中一部分电脑作为server,且要求每台电脑必须连 ...

  2. UVA - 1218 Perfect Service (树形dp)(inf相加溢出)

    题目链接 题意:给你一个树形图,让你把其中若干个结点染成黑色,其余的染成白色,使得任意一个白色结点都恰好与一个黑色结点相邻. 解法比较容易,和树上的最大独立集类似,取一个结点作为树根,对每个结点分三种 ...

  3. POJ3398Perfect Service[树形DP 树的最大独立集变形]

    Perfect Service Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1518   Accepted: 733 De ...

  4. Perfect service(树形dp)

    Perfect service(树形dp) 有n台机器形成树状结构,要求在其中一些机器上安装服务器,使得每台不是服务器的计算机恰好和一台服务器计算机相邻.求服务器的最小数量.n<=10000. ...

  5. UVA-1220-Party at Hali-Bula && UVA-1218-Perfect Service(树形DP)

    UVA-1220-Party at Hali-Bula 题意: 一个公司员工要举行聚会,要求任意一个人不能和他的直接上司同时到场,一个员工只有一个支系上司,现在求最多有多少人到场,并且方案是否唯一(紫 ...

  6. lightoj 1201 - A Perfect Murder(树形dp)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1201 题解:简单的树形dp,dp[0][i]表示以i为根结点不傻i的最多有多少 ...

  7. Perfect Service [POJ 3398]

    Perfect Service 描述 网络由N个通过N-1个通信链路连接的计算机组成,使得任何两台计算机可以通过独特的路由进行通信.如果两台计算机之间存在通信链路,则称这两台计算机是相邻的.计算机的邻 ...

  8. POJ 3398 Perfect Service(树型动态规划,最小支配集)

    POJ 3398 Perfect Service(树型动态规划,最小支配集) Description A network is composed of N computers connected by ...

  9. POJ 1849 - Two - [DFS][树形DP]

    Time Limit: 1000MS Memory Limit: 30000K Description The city consists of intersections and streets t ...

随机推荐

  1. reduce累加实现

    与map端的模式类似,map端要重写Mapper方法,reduce端也要重写Reduce方法,这里有一个泛型,我们先看参数类型 分别对应输入keyin,valuein,keyout,valueout. ...

  2. mysql玩法

    如何字段名查找所在的表名 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = '字段名字' select sys ...

  3. mybatis 10: 动态sql --- part2

    < foreach >标签 作用 用来进行循环遍历,完成循环条件的查询,批量删除,批量增加,批量更新 用法 循环查询 + 批量删除 + 批量增加 + 批量更新 UsersMapper.ja ...

  4. 五,手写SpringMVC框架,过滤器的使用

    8. 过滤器 8.1 编写字符过滤器 CharacterEncodingFilter 复制项目mymvc4,新建项目mymvc5 package com.hy.filter; import java. ...

  5. 使用VitePress搭建及部署vue组件库文档

    每个组件库都有它们自己的文档.所以当我们开发完成我们自己的组件库必须也需要一个组件库文档.如果你还不了解如何搭建自己的组件库可以看这里->从零搭建Vue3组件库.看完这篇文章你就会发现原来搭建和 ...

  6. Excel 统计函数(四):AVERAGEIF 和 AVERAGEIFS

    AVERAGEIF [语法]AVERAGEIF(range, criteria, [average_range]) [参数] range:要计算平均值的一个或多个单元格: criteria:筛选条件: ...

  7. 万物皆可集成系列:低代码释放用友U8+深度价值(2)—数据拓展应用

    在上一篇内容我们介绍了如何利用低代码开发套件实现低代码应用与U8+系统的对接集成,本次给大家带来的是如何将用友U8+系统中的数据进行价值扩展和实际应用. 我们以生产物料齐套分析为例来说明如何利用低代码 ...

  8. IDEA:库源与类的字节码不匹配

    在我配置pom.xml文件后,进行代码编辑,发现引入的方法并不是想要的内容,然后我就进入下载源码后进入到源码中发现我想要的方法和导入的jar包内的源码方法并不相同 ,于是到jar的存放地址中将其他版本 ...

  9. idea中无法在@Test 之下使用Scanner

    //如何解决idea中无法在 @Test 之下使用Scanner@Testpublic void testInsert(){ Scanner scanner = new Scanner(System. ...

  10. 踩坑 Windows 服务来宿主 .NET 程序

    本文所指的 .NET 程序为 .NET6 的程序.因为 .NET 的版本更新很快,所以方式.方法也有变化,所以网上搜到的方法有些也过时了.以下是最近我实践下来的一点心得(坑). 上一篇说到 不安装运行 ...