UVA - 1218 Perfect Service (树形DP)
思路: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[u][1] - d[v][2] + d[v][0]);
- }
AC代码:
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #include<utility>
- #include<string>
- #include<iostream>
- #include<map>
- #include<set>
- #include<vector>
- #include<queue>
- #include<stack>
- using namespace std;
- #define eps 1e-10
- #define inf 0x3f3f3f3f
- #define PI pair<int, int>
- const int maxn = 10000 + 5;
- vector<int>son[maxn];
- int d[maxn][3];
- void dfs(int u, int pre) {
- d[u][0] = 1;
- d[u][1] = 0;
- int n = son[u].size();
- for(int i = 0; i < n; ++i) {
- int v = son[u][i];
- if(v == pre) continue;
- dfs(v, u);
- d[u][0] += min(d[v][0], d[v][1]);
- d[u][1] += d[v][2];
- if(d[u][0] > inf) d[u][0] = inf;
- if(d[u][1] > inf) d[u][1] = inf;
- }
- d[u][2] = inf;
- for(int i = 0; i < n; ++i) {
- int v= son[u][i];
- if(v == pre) continue;
- d[u][2] = min(d[u][2], d[u][1] - d[v][2] + d[v][0]);
- }
- }
- int main() {
- int END, n;
- while(scanf("%d", &n) == 1 && n != -1) {
- for(int i = 0; i <= n; ++i) son[i].clear();
- int x, y;
- for(int i = 1; i < n; ++i) {
- scanf("%d%d", &x, &y);
- son[x-1].push_back(y-1);
- son[y-1].push_back(x-1);
- }
- dfs(0, -1);
- printf("%d\n", min(d[0][0], d[0][2]));
- scanf("%d", &END);
- if(END == -1) break;
- }
- return 0;
- }
如有不当之处欢迎指出!
UVA - 1218 Perfect Service (树形DP)的更多相关文章
- UVA - 1218 Perfect Service(树形dp)
题目链接:id=36043">UVA - 1218 Perfect Service 题意 有n台电脑.互相以无根树的方式连接,现要将当中一部分电脑作为server,且要求每台电脑必须连 ...
- UVA - 1218 Perfect Service (树形dp)(inf相加溢出)
题目链接 题意:给你一个树形图,让你把其中若干个结点染成黑色,其余的染成白色,使得任意一个白色结点都恰好与一个黑色结点相邻. 解法比较容易,和树上的最大独立集类似,取一个结点作为树根,对每个结点分三种 ...
- UVa 1218 - Perfect Service
/*---UVa 1218 - Perfect Service ---首先对状态进行划分: ---dp[u][0]:u是服务器,则u的子节点可以是也可以不是服务器 ---dp[u][1]:u不是服务器 ...
- UVa 1218 - Perfect Service(树形DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVa 1218 Perfect Service 完美的服务
***状态设计值得一看dp[u][0]表示u是服务器(以下v均指任意u的子结点,son指u的所有子结点)ap[u][0]=sum{dp[v][1]}+1//错误,服务器是可以和其他服务器相邻的dp[u ...
- POJ3398Perfect Service[树形DP 树的最大独立集变形]
Perfect Service Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 1518 Accepted: 733 De ...
- UVa 10859 - Placing Lampposts 树形DP 难度: 2
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- UVa 1292 - Strategic game (树形dp)
本文出自 http://blog.csdn.net/shuangde800 题目链接: 点击打开链接 题目大意 给定一棵树,选择尽量少的节点,使得每个没有选中的结点至少和一个已选结点相邻. 思路 ...
- Uva LA 3902 - Network 树形DP 难度: 0
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
随机推荐
- linkin大话面向对象--类和对象
我们每天在撸码,那么我们在敲什么东西呢?明显的我们在写类,写一个类,写一个接口,写某个接口里面写一些属性,在某个类里面写一个方法,然后以一个对象调用方法,对于j2ee来讲的话,可能还会写一些jsp,静 ...
- 号外号外!解决github+hexo+yilia评论插件的问题!!!
先走一波效果图! 本人网站--http://www.wenzheng.club/ ps:效果还是不错的,支持QQ微信登录,支持表情,甚至gif动图评论! 插件采用韩国服务器的来必力评论插件--h ...
- PHP date函数详解
在页面的最前页加上date_default_timezone_set(PRC); /*把时间调到北京时间,php5默认为格林威治标准时间*/date ()a: "am"或是 ...
- awk批量处理文件夹中所有文件
#c=`` done
- 【Thinkphp 5】 如何引入extend拓展文件
extend/maile/cc.php 文件目录 cc文件 必须要加上命名空间,如下 cc.php文件内容如下: namespace maile; //命名空间 maile是文件夹名称 class C ...
- Spring事务不回滚原因分析
Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离. 在我完成一个项目的时候,遇到了一个Spring事务不回滚的问题,通过aspectJ和@Transacti ...
- html的标签
<a>:anchor 定义锚 <abbr>:abbreviation 定义缩写 <acronym>: 定义只取消首字母的缩写 <address>:定义地 ...
- AppScan 扫描测试策略
使用 AppScan 进行扫描 针对大型网站的扫描,我们按照戴明环 PDCA 的方法论来进行规划和讨论,建议 AppScan 使用步骤:计划(Plan).执行(Do).检查(check).分析(Ana ...
- hadoop初学
Hadoop: 官网(hadoop.apache.org)的定义: 一:Hadoop Common: 为Hadoop其它模块提供通用的支持 二:HDFS: 是Hadoop的分布式文件系统,其特点是高度 ...
- Matplotlib快速入门笔记
我正以Python作为突破口,入门机器学习相关知识.出于机器学习实践过程中的需要,快速了解了一下matplotlib绘图库.下图是我学习过程中整理的一些概念. 本文将以该图为线索梳理相关概念. 简介 ...