Uva 1218 完美的服务
题目链接: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 完美的服务的更多相关文章
- UVA - 1218 Perfect Service(树形dp)
题目链接:id=36043">UVA - 1218 Perfect Service 题意 有n台电脑.互相以无根树的方式连接,现要将当中一部分电脑作为server,且要求每台电脑必须连 ...
- UVa 1218 - Perfect Service
/*---UVa 1218 - Perfect Service ---首先对状态进行划分: ---dp[u][0]:u是服务器,则u的子节点可以是也可以不是服务器 ---dp[u][1]:u不是服务器 ...
- UVa 1218 Perfect Service 完美的服务
***状态设计值得一看dp[u][0]表示u是服务器(以下v均指任意u的子结点,son指u的所有子结点)ap[u][0]=sum{dp[v][1]}+1//错误,服务器是可以和其他服务器相邻的dp[u ...
- UVa 1218 - Perfect Service(树形DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- 使用Httpclient 完美解决服务端跨域问题
项目需求: jsonp是从前台js的角度考虑,通过Ajax调用springMVC的接口.同一个ip.同一个网络协议.同一个端口,三者都满足就是同一个域,否则就是跨域问题了.首页广告需要一个轮播的效果, ...
- UVA - 1218 Perfect Service (树形DP)
思路:dp[i][0]表示i是服务器:dp[i][1]表示i不是服务器,但它的父节点是服务器:dp[i][2]表示i和他的父亲都不是服务器. 转移方程: d[u][0] += min(d[ ...
- UVA - 1218 Perfect Service (树形dp)(inf相加溢出)
题目链接 题意:给你一个树形图,让你把其中若干个结点染成黑色,其余的染成白色,使得任意一个白色结点都恰好与一个黑色结点相邻. 解法比较容易,和树上的最大独立集类似,取一个结点作为树根,对每个结点分三种 ...
- Perfect Service UVA - 1218
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #inclu ...
- 紫书 例题 9-14 UVa 1218 (树形dp)
这道题有个初始值设成1e9, 然后这个值是要加很多次的,然后就会溢出变成负数, 然后就一直WA, 找这个bug找了一个小时--以后不能随便这样设那么大, 要考虑会不会加很多次然后溢出. 讲一下思路. ...
随机推荐
- C++Primer 第十二章
//1.标准库提供了两种智能指针类型来管理动态对象,均定义在头文件memory中,声明在std命名空间. // shared_ptr:允许多个指针指向同一个对象. // unique_ptr:独占所指 ...
- Leetcode: Water and Jug Problem && Summary: GCD求法(辗转相除法 or Euclidean algorithm)
You are given two jugs with capacities x and y litres. There is an infinite amount of water supply a ...
- linux挂接U盘
挂接U盘fdisk -lDisk /dev/sdd: 131 MB, 131072000 bytes/dev/sdd1 * 1 889 127983+ b Win95 FAT32#mkdir -p / ...
- android中影藏状态栏和标题栏的几种方法
1,在android中,有时候我们想隐藏我们的状态栏和标题栏(如:第一次安装app时候的欢迎界面),实现这些效果有几种方法,随便选取自己喜欢的即可. 2, A:利用代码实现,在我们主Activity中 ...
- 16---Net基础加强
更新中,敬请期待............ Xml介绍 xml读写练习 xml练习1 xml练习2
- zw版【转发·台湾nvp系列Delphi例程】HALCON SetLineStyle1
zw版[转发·台湾nvp系列Delphi例程]HALCON SetLineStyle1 procedure TForm1.Button1Click(Sender: TObject);var img : ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON 3D Position Of Circles
zw版[转发·台湾nvp系列Delphi例程]HALCON 3D Position Of Circles procedure TForm1.action();var ho_Image, ho_Elli ...
- 【NOIP模拟赛】lover——心上人
心上人 [问题描述] 人到初三,总会遇到情感问题,比方说小 J 就喜欢上了小 W.于是小 J 就需要说一长串的话讨小 W 欢心.现在已知小 W 听到一些词就会很高兴,而且白听不厌,但她又讨厌小 J ...
- TI CC2541增加一个可读写, 又可以Notify的特征字
参考这个博客: http://blog.csdn.net/feilusia/article/details/48235691 值得注意是, 测试前, 在手机中先取消对原有的设备的配对.
- c/c++ 常用的几个安全函数
_stprintf_s // 格式化字符串 _vsntprintf_s // 格式化 不定长参数用到