思路: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)的更多相关文章

  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. Map排序与有序

    排序: private static List<Map.Entry<String, Long>> sortHashMap(HashMap<String,Long> ...

  2. 学Java分布式和高架构,必懂的两大知识点!

    今天小编为你们分享阿里巴巴2018年招聘应届毕业生,Java工程师的面试考题,主要分为三种 Java中获取 mysql连接的方式: 第一部分:分布式   三步变成:分布式 1.将你的整个软件视为一个系 ...

  3. 定时任务schedule(quartz)

    1, 简介Quartz是一个任务调度框架.核心类:Scheduler  :调度器,所有Job的调度都是由它控制;JobDetail   :生成Job对象的实例,存储Job对象需要的参数;Job     ...

  4. nodejs模块引用

    模块的引用是后端语言非常重要的一部分,那么在nodejs中,如何做到这一点呢. 在引用其他模块时,常用的就是两种方法:exports,module.exports. 接下来,我们写一个demo来分辨其 ...

  5. apache编译安装参数说明

    apache编译安装参数说明 ./configure //配置源代码树--prefix=/usr/local/apache2 //体系无关文件的顶级安装目录prefix ,也就apache的安装目录. ...

  6. MySQL刷新事务日志级别设置

    标签(linux): mysql 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 # if set to 1 , InnoDB will flush (fsync ...

  7. 理解js中的作用域,作用域链以及闭包

    作用域变量作用域的类型:全局变量和局部变量全局作用域对于最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的 <script> var outerVar = " ...

  8. python监控微信报警

    微信接口调用代码: #coding=utf8 import itchat from flask import Flask, request itchat.auto_login(enableCmdQR= ...

  9. 树莓派用U盘安装系统

    * 需要使用Raspbian / Raspbian Lite或更高版本的2017-04-10版本 *不会SD卡装系统? 1.  先用装好Raspbian系统的SD卡启动 在命令行输入    echo ...

  10. Django中不返回QuerySets的API -- Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...