//   uva 1218 Perfect Service 树形dp
//
//  解题思路:
//
//      d[u][0]表示节点本身是服务器
//      d[u][1]表示节点的父节点是服务器
//      d[u][2]表示节点的孩子是服务器
//      d[u][0] = sigma(d[v][0],d[v][1]); // 自己是服务器,那么孩子可以是服务器
//                                        // 也可以不是服务器
//      d[u][1] = sigma(d[v][2]);  // 父亲是服务器,那么本身就不用了,只要孩子
//                                  // 的孩子是服务器.这样是最优的
//      d[u][2] = min(d[u][1] - d[v][2] + d[v][0]) // 只要一个孩子是服务器就可以了
//
//  整体感悟:
//
//      这道题看了很久很久,有一年了吧,对于d[u][0]很好理解,d[u][1]也挺好理解
//  对于d[u][2]理解一直不够,但是忽然就恍然大悟,只要一个孩子节点的孩子有服务器就
//  可以啦,其他都不必.过程是很痛苦的,但是最后发现自己理解以后,还是挺好理解的
//  继续加油吧~~~~FIGHTING!!!#include <cstring>
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#define For(x,a,b,c) for (int x = a; x <= b; x += c)
#define Ffor(x,a,b,c) for (int x = a; x >= b; x -= c)
#define cls(x,a) memset(x,a,sizeof(x))
using namespace std;
typedef long long ll;const double PI = acos(-1.0);
const double EPS = 1e-10;
const int MAX_N = 10000 + 8;
const int INF = 10009;
int N,M;vector<int> g[MAX_N];
int d[MAX_N][3];void input(){for (int i = 1;i <= N;i ++)g[i].clear();for (int i = 1;i < N;i ++){int u,v;scanf("%d%d",&u,&v);g[u].push_back(v);g[v].push_back(u);}
}void DP(int u,int fa){d[u][0] = 1;d[u][1] = 0;d[u][2] = INF;for (int i = 0;i < g[u].size(); i++){int v = g[u][i];if (v == fa)continue;DP(v,u);d[u][0] += min(d[v][0],d[v][1]);d[u][1] += d[v][2];}for (int i = 0 ; i< g[u].size();i ++){int v = g[u][i];if (v == fa)continue;d[u][2] = min(d[u][2],d[u][1] - d[v][2] + d[v][0]);}}void solve(){DP(1,-1);printf("%d\n",min(d[1][0],d[1][2]));
}int main(){//freopen("1.in","r",stdin);while(scanf("%d",&N)){input();solve();int x;scanf("%d",&x);if (x == -1)break;}return 0;
}

uva 1218 Perfect Service 树形dp相关推荐

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

    题目链接:UVA - 1218 Perfect Service 题意 有n台电脑,互相以无根树的方式连接,现要将其中一部分电脑作为服务器,且要求每台电脑必须连接且只能连接一台服务器(不包括作为服务器的 ...

  2. uva 1218——Perfect Service

    题意:有n个机器组成的树形结构,要求一台服务器必须连接一台电脑,求使用的最少的服务器.. 思路: 树形DP,和前面的有道题目类似.在dfs遍历树的时候找到选当前结点和不选当前节点的最大状态,多一个两个 ...

  3. [树形DP | Uva 1218]Perfect Service

    dp[i][0]表示以i为根的且i被选为服务器的最小服务器数 dp[i][1]表示以i为根且i不被选为服务器,而i父亲为服务器的最小服务器数 dp[i][2]表示以i为根且i不被选为服务器,而i父亲也 ...

  4. uva 10859 放置街灯树形dp

    首先,本题的优化目标有两个:放置的街灯a应该尽量少:被两灯同时照亮的边数b应该尽量大.为了统一起见,我们把后者替换为:恰好被一盏灯照亮的边数c应该尽量小,然后改用x = Ma+c作为优化目标,其中一个 ...

  5. Placing Lampposts UVA - 10859 放置街灯 树形dp

    As a part of the mission 'Beautification of Dhaka City', the government has decided to replace all t ...

  6. Perfect service(树形dp)

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

  7. 容斥 + 树形dp ---- 2021 icpc 沈阳 L Perfect Matchings

    题目链接 题目大意: 就是给你一个2n2n2n个点的完全图,从这个图里面抽出2n−12n-12n−1条边,这些边形成一颗树,现在问你剩下的图里面点进行完美匹配有多少种方案? 解题思路: 一开始被完美匹 ...

  8. Party at Hali-Bula UVA - 1220(树形dp)

    题目链接:传送门 思路:求最多参与人数是树形dp的入门题,和没有上司的舞会是一个题目,但是这个题目还要求答案是否唯一.我们开设一个标记数组vis,标记就可以了.具体解释看代码: #include< ...

  9. 紫书动规 例题9-13 UVA - 1220 Party at Hali-Bula 树形dp

    题目链接: https://vjudge.net/problem/UVA-1220 题意: 题解: 树形dp: 树的最大独立集问题 d[u][0]:=不选u能得到的最大人数 d[u][0]=sum{m ...

最新文章

  1. 计算机网络技术专业毕业大作业答案,计算机网络技术大作业考核要求A卷
  2. 【数据挖掘笔记四】数据仓库和联机分析处理
  3. 数据挖掘导论读书笔记11异常检测
  4. SGDRegressor
  5. 基于Mac自带nginx、php,配置php服务器
  6. 工作流表单自定义功能的误区
  7. vue transition
  8. Java 并发总结——AQS
  9. React中的fragment和StrictMode
  10. 水面反光如何拍摄_拍摄水面反射的创意
  11. js正则表达式匹配字符串与优化过程
  12. 深大计算机系有金工实习吗,金工实习报告答案深圳大学拿A答案(精选).pdf
  13. STOA-diary-20110312-抉择
  14. 链表分割——牛客剑指offer
  15. vue拦截器刷新登陆页面_vue页面跳转拦截器
  16. Android全面屏如何做适配
  17. CAD工具——批量打印
  18. html5 连连看小游戏
  19. java poi word 复制_java poi实现word导出(包括word模板的使用、复制表格、复制行、插入图片的使用)...
  20. mybatis的基本雏形

热门文章

  1. 测试工程师之【python】按工龄开始日期和司龄开始日期计算当年公司福利年假
  2. MICROCHIP的PIC16F1519-I/PT中英文简略规格书
  3. 计算机电子琴谱小星星,小星星电子琴谱
  4. 《惢客创业日记》2019.01.21(周一)你还记得米卢吗?
  5. Espressif 玩转 PWM
  6. 【2022-9-21最新】青龙面板搭建+sillyGirl+对接微信公众号+onebot
  7. Solar-PuTTY修改背景、字体颜色和字体大小
  8. PBR--RTR4笔记--第八章 光与颜色
  9. Java基础の乱弹琴二:break关键字
  10. MySQL 数据表主键设计,选择自增 id 还是 UUID 还是雪花 id?