思路:dp[i][0]表示i是服务器;dp[i][1]表示i不是服务器,但它的父节点是服务器;dp[i][2]表示i和他的父亲都不是服务器。

      转移方程:

  1. d[u][0] += min(d[v][0], d[v][1]);
  2. d[u][1] += d[v][2];
  3. for(int i = 0; i < n; ++i) {
  4.       int v= son[u][i];
  5.       if(v == pre) continue;
  6.       d[u][2] = min(d[u][2], d[u][1] - d[v][2] + d[v][0]);
  7.    }



AC代码:

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<utility>
  5. #include<string>
  6. #include<iostream>
  7. #include<map>
  8. #include<set>
  9. #include<vector>
  10. #include<queue>
  11. #include<stack>
  12. using namespace std;
  13. #define eps 1e-10
  14. #define inf 0x3f3f3f3f
  15. #define PI pair<int, int>
  16. const int maxn = 10000 + 5;
  17. vector<int>son[maxn];
  18. int d[maxn][3];
  19.  
  20. void dfs(int u, int pre) {
  21. d[u][0] = 1;
  22. d[u][1] = 0;
  23. int n = son[u].size();
  24. for(int i = 0; i < n; ++i) {
  25. int v = son[u][i];
  26. if(v == pre) continue;
  27. dfs(v, u);
  28. d[u][0] += min(d[v][0], d[v][1]);
  29. d[u][1] += d[v][2];
  30. if(d[u][0] > inf) d[u][0] = inf;
  31. if(d[u][1] > inf) d[u][1] = inf;
  32. }
  33. d[u][2] = inf;
  34. for(int i = 0; i < n; ++i) {
  35. int v= son[u][i];
  36. if(v == pre) continue;
  37. d[u][2] = min(d[u][2], d[u][1] - d[v][2] + d[v][0]);
  38. }
  39. }
  40.  
  41. int main() {
  42. int END, n;
  43. while(scanf("%d", &n) == 1 && n != -1) {
  44. for(int i = 0; i <= n; ++i) son[i].clear();
  45. int x, y;
  46. for(int i = 1; i < n; ++i) {
  47. scanf("%d%d", &x, &y);
  48. son[x-1].push_back(y-1);
  49. son[y-1].push_back(x-1);
  50. }
  51. dfs(0, -1);
  52. printf("%d\n", min(d[0][0], d[0][2]));
  53. scanf("%d", &END);
  54. if(END == -1) break;
  55. }
  56. return 0;
  57. }

如有不当之处欢迎指出!



UVA - 1218 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. UVa 1218 - Perfect Service

    /*---UVa 1218 - Perfect Service ---首先对状态进行划分: ---dp[u][0]:u是服务器,则u的子节点可以是也可以不是服务器 ---dp[u][1]:u不是服务器 ...

  4. UVa 1218 - Perfect Service(树形DP)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. UVa 1218 Perfect Service 完美的服务

    ***状态设计值得一看dp[u][0]表示u是服务器(以下v均指任意u的子结点,son指u的所有子结点)ap[u][0]=sum{dp[v][1]}+1//错误,服务器是可以和其他服务器相邻的dp[u ...

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

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

  7. UVa 10859 - Placing Lampposts 树形DP 难度: 2

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  8. UVa 1292 - Strategic game (树形dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接: 点击打开链接 题目大意 给定一棵树,选择尽量少的节点,使得每个没有选中的结点至少和一个已选结点相邻. 思路 ...

  9. Uva LA 3902 - Network 树形DP 难度: 0

    题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

随机推荐

  1. linkin大话面向对象--类和对象

    我们每天在撸码,那么我们在敲什么东西呢?明显的我们在写类,写一个类,写一个接口,写某个接口里面写一些属性,在某个类里面写一个方法,然后以一个对象调用方法,对于j2ee来讲的话,可能还会写一些jsp,静 ...

  2. 号外号外!解决github+hexo+yilia评论插件的问题!!!

    先走一波效果图!    本人网站--http://www.wenzheng.club/ ps:效果还是不错的,支持QQ微信登录,支持表情,甚至gif动图评论! 插件采用韩国服务器的来必力评论插件--h ...

  3. PHP date函数详解

    在页面的最前页加上date_default_timezone_set(PRC);   /*把时间调到北京时间,php5默认为格林威治标准时间*/date ()a:   "am"或是 ...

  4. awk批量处理文件夹中所有文件

       #c=``     done

  5. 【Thinkphp 5】 如何引入extend拓展文件

    extend/maile/cc.php 文件目录 cc文件 必须要加上命名空间,如下 cc.php文件内容如下: namespace maile; //命名空间 maile是文件夹名称 class C ...

  6. Spring事务不回滚原因分析

    Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离. 在我完成一个项目的时候,遇到了一个Spring事务不回滚的问题,通过aspectJ和@Transacti ...

  7. html的标签

    <a>:anchor 定义锚 <abbr>:abbreviation 定义缩写 <acronym>: 定义只取消首字母的缩写 <address>:定义地 ...

  8. AppScan 扫描测试策略

    使用 AppScan 进行扫描 针对大型网站的扫描,我们按照戴明环 PDCA 的方法论来进行规划和讨论,建议 AppScan 使用步骤:计划(Plan).执行(Do).检查(check).分析(Ana ...

  9. hadoop初学

    Hadoop: 官网(hadoop.apache.org)的定义: 一:Hadoop Common: 为Hadoop其它模块提供通用的支持 二:HDFS: 是Hadoop的分布式文件系统,其特点是高度 ...

  10. Matplotlib快速入门笔记

    我正以Python作为突破口,入门机器学习相关知识.出于机器学习实践过程中的需要,快速了解了一下matplotlib绘图库.下图是我学习过程中整理的一些概念. 本文将以该图为线索梳理相关概念. 简介 ...