题目链接:https://uva.onlinejudge.org/external/12/1218.pdf

题意:

一个网络,选出一些点做服务器,使满足一些条件,求服务器最少数量。条件是,每个计算机恰有一台服务器相连。

分析:

对于每个节点,都有3种状态,1、他是服务器 d(u,0),2、他不是服务器,但是父亲是的 d(u,1),如果他父亲是服务器,将影响他的接下来的决策。3、他不是服务器,父亲也不是服务器 d(u,2);

那么:

d(u,0) = sum{max{d(v,0),d(v,1)}};

d(u,1) = sum{d(v,2)};

d(u,2) 子节点恰有一台是服务器,可以利用 上面的求出, d(u,2) = min{d(u,1)-d(v,2)+d(v,0)};

建树时,可以以任一点为根。

#include <bits/stdc++.h>
using namespace std; #define maxn 10005
#define INF 0x3f3f3f3f int n;
vector<int> G[maxn],vertices;
int p[maxn],d[maxn][]; //建树
void dfs(int u,int fa) {
vertices.push_back(u);
p[u] = fa;
for(int i=;i<G[u].size();i++) {
int v = G[u][i];
if(v!=fa)
dfs(v,u);
}
} int main()
{
while(scanf("%d",&n),n!=-) { for(int i=;i<n;i++)
G[i].clear(); for(int i = ;i<n-;i++) {
int u,v;
scanf("%d%d",&u,&v);
u--;
v--;
G[u].push_back(v);
G[v].push_back(u);
} vertices.clear();
dfs(,-);
memset(d,,sizeof(d)); for(int i=vertices.size()-;i>=;i--) {
int u = vertices[i];
d[u][] = ;
d[u][] = ;
for(int j=;j<G[u].size();j++) {
int v = G[u][j];
if(v==p[u]) continue;
d[u][] +=min(d[v][],d[v][]);
d[u][] +=d[v][];
if(d[u][]>INF) d[u][] = INF;
if(d[u][]>INF) d[u][] = INF;
}
d[u][] = INF; for(int j=;j<G[u].size();j++) {
int v = G[u][j];
if(v==p[u]) continue;
d[u][] = min(d[u][],d[u][]-d[v][]+d[v][]);
} }
printf("%d\n",min(d[][],d[][]));
scanf("%d",&n); }
return ;
}

Uva 1218 完美的服务的更多相关文章

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

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

  2. UVa 1218 - Perfect Service

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

  3. UVa 1218 Perfect Service 完美的服务

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

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

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

  5. 使用Httpclient 完美解决服务端跨域问题

    项目需求: jsonp是从前台js的角度考虑,通过Ajax调用springMVC的接口.同一个ip.同一个网络协议.同一个端口,三者都满足就是同一个域,否则就是跨域问题了.首页广告需要一个轮播的效果, ...

  6. UVA - 1218 Perfect Service (树形DP)

    思路:dp[i][0]表示i是服务器:dp[i][1]表示i不是服务器,但它的父节点是服务器:dp[i][2]表示i和他的父亲都不是服务器.       转移方程: d[u][0] += min(d[ ...

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

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

  8. Perfect Service UVA - 1218

    #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #inclu ...

  9. 紫书 例题 9-14 UVa 1218 (树形dp)

    这道题有个初始值设成1e9, 然后这个值是要加很多次的,然后就会溢出变成负数, 然后就一直WA, 找这个bug找了一个小时--以后不能随便这样设那么大, 要考虑会不会加很多次然后溢出. 讲一下思路. ...

随机推荐

  1. J2EE maven pom.xml常用的jar包

    新建一个maven webapp工程,默认的pom.xml文件如下: <project xmlns="http://maven.apache.org/POM/4.0.0" x ...

  2. Leetcode: Lexicographical Numbers

    Given an integer n, return 1 - n in lexicographical order. For example, given 13, return: [1,10,11,1 ...

  3. G面经prepare: BuyGoods

    给你一部分钱和一些不同价钱的商品,如何在最多买K件商品的情况下尽可能多的花掉手里的钱. 举例:口袋里的钱数: 10; K=2 产品价格: [3, 6, 8, 7, 9] 输出 3, 7 Backtra ...

  4. [原创]java WEB学习笔记44:Filter 简介,模型,创建,工作原理,相关API,过滤器的部署及映射的方式,Demo

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. JS不兼容减号,css属性转驼峰写法

    <script> function changeFormat(str) { return str.replace(/-(\w)/g, function(k, r) { return r.t ...

  6. php laravel curD

    Laravel PHP Web开发框架 Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的 ...

  7. 一个标准的ECharts代码

    <!DOCTYPE html> <head> <meta charset="utf-8"> <title>ECharts</t ...

  8. paper 33 :[教程] 如何使用libsvm进行分类

    文章来源:http://www.matlabsky.com/thread-12379-1-1.html 这篇文章的讲解的真的是言简意赅,很简单的例子就把这个入门的门槛降低了不少,目前的情况是,我都晓得 ...

  9. RMAN备份演练进阶篇

    前篇介绍了通过rman进行各种备份,进阶篇则主要是rman的一些功能扩展和增加功能,利用前篇你已经完全可以完成数据库的备份,而通过本篇你可以更好更方便的完成数据库的备份. 一.建立增量备份 如果数据库 ...

  10. 夺命雷公狗---DEDECMS----3快速入门之隐藏

    如果我们在工作的时候遇到上操蛋的老板,本来公司是做医疗器械的,但是老板突然老了句我们不做医疗了,我们该做电影网,那么我们可以先将原本的栏目进行修改成隐藏栏目, 主要是预防变态老板突然来句“电影网更不好 ...